diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2004-09-21 10:42:38 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2004-09-21 10:42:38 +0000 |
commit | fa7ff4ef4307116376554c2d5bbfc8fc6ff615dd (patch) | |
tree | cb6ea88cd092aa90d795ed03f91246994e5f2e29 /sys/lib/libkern/arch | |
parent | dad620a876413c821a345111685d08b651570c7f (diff) |
Keep providing a 32bit only version of bzero() #ifdef _STANDALONE, as
bootblocks are compiled as 32bit code.
Diffstat (limited to 'sys/lib/libkern/arch')
-rw-r--r-- | sys/lib/libkern/arch/mips64/bzero.S | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/sys/lib/libkern/arch/mips64/bzero.S b/sys/lib/libkern/arch/mips64/bzero.S index 695d60d4508..9fe50002b24 100644 --- a/sys/lib/libkern/arch/mips64/bzero.S +++ b/sys/lib/libkern/arch/mips64/bzero.S @@ -1,4 +1,4 @@ -/* $OpenBSD: bzero.S,v 1.4 2004/09/18 09:13:57 pefo Exp $ */ +/* $OpenBSD: bzero.S,v 1.5 2004/09/21 10:42:37 miod Exp $ */ /*- * Copyright (c) 1991, 1993 * The Regents of the University of California. All rights reserved. @@ -34,13 +34,30 @@ #include "DEFS.h" - /* * bzero(void *p, size_t len) */ LEAF(bzero, 0) ALEAF(blkclr) .set noreorder +#ifdef _STANDALONE + blt a1, 12, smallclr # small amount to clear? + subu a3, zero, a0 # compute # bytes to word align address + and a3, a3, 3 + beq a3, zero, 1f # skip if word aligned + subu a1, a1, a3 # subtract from remaining count + SWHI zero, 0(a0) # clear 1, 2, or 3 bytes to align + addu a0, a0, a3 +1: + and v0, a1, 3 # compute number of words left + subu a3, a1, v0 + move a1, v0 + addu a3, a3, a0 # compute ending address +2: + addu a0, a0, 4 # clear words + bne a0, a3, 2b # unrolling loop does not help + sw zero, -4(a0) # since we are limited by memory speed +#else blt a1, 24, smallclr # small amount to clear? subu a3, zero, a0 # compute # bytes to word align address and a3, a3, 7 @@ -57,6 +74,7 @@ ALEAF(blkclr) addu a0, a0, 8 # clear words bne a0, a3, 2b # unrolling loop does not help sd zero, -8(a0) # since we are limited by memory speed +#endif smallclr: ble a1, zero, 2f addu a3, a1, a0 # compute ending address @@ -68,4 +86,3 @@ smallclr: j ra nop END(bzero) - |