diff options
author | 1995-11-06 21:15:52 +0000 | |
---|---|---|
committer | 1995-11-06 21:15:52 +0000 | |
commit | cb03e882a613d863270f4cbceda847ce20f0140d (patch) | |
tree | 97725aa280595d9cd61a28073140afdb52ead7a7 /sys/lib/libkern/arch/mips/bzero.S | |
parent | Remove extra space in first line so tic can exec it. (this is actually a bogus fix) (diff) | |
download | wireguard-openbsd-cb03e882a613d863270f4cbceda847ce20f0140d.tar.xz wireguard-openbsd-cb03e882a613d863270f4cbceda847ce20f0140d.zip |
libkern pica stuff
Diffstat (limited to 'sys/lib/libkern/arch/mips/bzero.S')
-rw-r--r-- | sys/lib/libkern/arch/mips/bzero.S | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/sys/lib/libkern/arch/mips/bzero.S b/sys/lib/libkern/arch/mips/bzero.S new file mode 100644 index 00000000000..07fae64f768 --- /dev/null +++ b/sys/lib/libkern/arch/mips/bzero.S @@ -0,0 +1,35 @@ +#include "DEFS.h" + +/* + * bzero(s1, n) + */ +LEAF(bzero) +ALEAF(blkclr) + 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 + swr 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 +smallclr: + ble a1, zero, 2f + addu a3, a1, a0 # compute ending address +1: + addu a0, a0, 1 # clear bytes + bne a0, a3, 1b + sb zero, -1(a0) +2: + j ra + nop +END(bzero) + |