From 6287d3d7b2754fb75d7a819d22a4c360832917e5 Mon Sep 17 00:00:00 2001 From: mycroft Date: Sat, 7 Oct 1995 22:24:50 +0000 Subject: [PATCH] Remove bzero(). --- sys/arch/sparc/sparc/locore.s | 102 ---------------------------------- 1 file changed, 102 deletions(-) diff --git a/sys/arch/sparc/sparc/locore.s b/sys/arch/sparc/sparc/locore.s index a6283e5a69a4..f75db818a3ba 100644 --- a/sys/arch/sparc/sparc/locore.s +++ b/sys/arch/sparc/sparc/locore.s @@ -4132,108 +4132,6 @@ ENTRY(qzero) retl nop -/* - * bzero(addr, len) - * - * We should unroll the loop, but at the moment this would - * gain nothing since the `std' instructions are what limits us. - */ -ALTENTRY(blkclr) -ENTRY(bzero) - ! %o0 = addr, %o1 = len - - ! Optimize a common case: addr and len are both multiples of 8. - or %o0, %o1, %o2 - btst 7, %o2 ! ((addr | len) & 7) != 0? - bnz 1f ! if so, cannot optimize - clr %g1 ! in any case, we want g1=0 - - /* `Good' operands, can just store doubles. */ -0: - deccc 8, %o1 ! while ((len -= 8) >= 0) - bge,a 0b - std %g0, [%o0 + %o1] ! *(quad *)(addr + len) = 0; - retl - nop - - /* - * Either the address is unaligned, or the count is not a - * multiple of 8, or both. We will have to align the address - * in order to use anything `better' than stb. - */ -1: - cmp %o1, 15 ! len >= 15? - bge,a Lstd ! yes, use std - btst 1, %o0 ! (but first check alignment) - - ! not enough to bother: do byte-at-a-time loop. -2: - deccc %o1 ! while (--len >= 0) - bge,a 2b - stb %g0, [%o0 + %o1] ! addr[len] = 0; - retl - nop - -Lstd: - /* - * There are at least 15 bytes to zero. - * We may have to zero some initial stuff to align - * the address. - */ - bz,a 1f ! if (addr & 1) { - btst 2, %o0 - stb %g0, [%o0] ! *addr = 0; - inc %o0 ! addr++; - dec %o1 ! len--; - btst 2, %o0 ! } -1: - bz,a 1f ! if (addr & 2) { - btst 4, %o0 - sth %g0, [%o0] ! *(short *)addr = 0; - inc 2, %o0 ! addr += 2; - dec 2, %o1 ! len -= 2; - btst 4, %o0 ! } -1: - bz 1f ! if (addr & 4) { - dec 8, %o1 - st %g0, [%o0] ! *(int *)addr = 0; - inc 4, %o0 ! addr += 4; - dec 4, %o1 ! len -= 4; - ! } - /* - * Address is double word aligned; len is 8 less than - * the number of bytes remaining (i.e., len is 0 if - * the remaining count is 8, 1 if it is 9, etc.). - */ -1: - std %g0, [%o0] ! do { -2: ! *(quad *)addr = 0; - inc 8, %o0 ! addr += 8; - deccc 8, %o1 ! } while ((len -= 8) >= 0); - bge,a 2b - std %g0, [%o0] - - /* - * Len is in [-8..-1] where -8 => done, -7 => 1 byte to zero, - * -6 => two bytes, etc. Mop up this remainder, if any. - */ - btst 4, %o1 - bz 1f ! if (len & 4) { - btst 2, %o1 - st %g0, [%o0] ! *(int *)addr = 0; - inc 4, %o0 ! addr += 4; -1: - bz 1f ! if (len & 2) { - btst 1, %o1 - sth %g0, [%o0] ! *(short *)addr = 0; - inc 2, %o0 ! addr += 2; -1: - bnz,a 1f ! if (len & 1) - stb %g0, [%o0] ! *addr = 0; -1: - retl - nop - /* * kernel bcopy/memcpy * Assumes regions do not overlap; has no useful return value.