On the 68010, don't bother with the by-8-longwords loop, instead

only 16-bit align the region and use loop mode with longwords
to do the bulk of the work.

On the 68020+, fixed an optimization bug where all regions that start
on odd addresses would not be properly longword aligned.
This commit is contained in:
fredette 2001-09-07 12:50:01 +00:00
parent c14e80bd30
commit 129f58b424

View File

@ -1,4 +1,4 @@
/* $NetBSD: memset.S,v 1.12 1999/10/25 23:48:15 thorpej Exp $ */ /* $NetBSD: memset.S,v 1.13 2001/09/07 12:50:01 fredette Exp $ */
/*- /*-
* Copyright (c) 1997 The NetBSD Foundation, Inc. * Copyright (c) 1997 The NetBSD Foundation, Inc.
@ -79,7 +79,7 @@
#if 0 #if 0
RCSID("from: @(#)bzero.s 5.1 (Berkeley) 5/12/90") RCSID("from: @(#)bzero.s 5.1 (Berkeley) 5/12/90")
#else #else
RCSID("$NetBSD: memset.S,v 1.12 1999/10/25 23:48:15 thorpej Exp $") RCSID("$NetBSD: memset.S,v 1.13 2001/09/07 12:50:01 fredette Exp $")
#endif #endif
#endif /* LIBC_SCCS and not lint */ #endif /* LIBC_SCCS and not lint */
@ -112,7 +112,9 @@ ENTRY(memset)
jeq Lbzalgndw | jeq Lbzalgndw |
movb %d2,%a0@+ | *(char *)dst++ = X movb %d2,%a0@+ | *(char *)dst++ = X
subql #1,%d1 | len-- subql #1,%d1 | len--
addql #1,%d0
Lbzalgndw: Lbzalgndw:
#ifndef __mc68010__
/* long word align */ /* long word align */
btst #1,%d0 | if (dst & 2) btst #1,%d0 | if (dst & 2)
jeq Lbzalgndl | jeq Lbzalgndl |
@ -138,6 +140,7 @@ Lbz32loop:
clrw %d0 clrw %d0
subql #1,%d0 subql #1,%d0
jcc Lbz32loop jcc Lbz32loop
#endif /* !__mc68010__ */
Lbzlong: Lbzlong:
/* set by longwords */ /* set by longwords */
@ -148,6 +151,11 @@ Lbzlong:
Lbzlloop: Lbzlloop:
movl %d2,%a0@+ | clear longwords movl %d2,%a0@+ | clear longwords
dbf %d0,Lbzlloop | till done dbf %d0,Lbzlloop | till done
#ifdef __mc68010__
clrw %d0
subql #1,%d0
jcc Lbzlloop
#endif /* __mc68010__ */
andl #3,%d1 | len %= 4 andl #3,%d1 | len %= 4
jeq Lbzdone jeq Lbzdone