Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Imported from FreeBSD with a minor change or two
- Loading branch information
scole
committed
Aug 5, 2016
1 parent
37d322e
commit f5f18d7
Showing
5 changed files
with
383 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* $NetBSD: bcopy.S,v 1.1 2016/08/05 15:06:02 scole Exp $ */ | ||
|
||
/*- | ||
* Copyright (c) 2000 Doug Rabson | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in the | ||
* documentation and/or other materials provided with the distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
* | ||
* __FBSDID("$FreeBSD: releng/10.1/lib/libc/ia64/string/bcopy.S 125669 2004-02-10 20:45:28Z cperciva $"); | ||
*/ | ||
|
||
#include <machine/asm.h> | ||
|
||
/* | ||
* void | ||
* bcopy(const void *src, void *dst, size_t len); | ||
*/ | ||
|
||
/* | ||
* Not the fastest bcopy in the world. | ||
*/ | ||
ENTRY(bcopy, 3) | ||
|
||
cmp.le p6,p0=in2,r0 // bail if len <= 0 | ||
(p6) br.ret.spnt.few rp | ||
|
||
sub r14=in1,in0 ;; // check for overlap | ||
cmp.ltu p6,p0=r14,in2 // dst-src < len | ||
(p6) br.cond.spnt.few 5f | ||
|
||
extr.u r14=in0,0,3 // src & 7 | ||
extr.u r15=in1,0,3 ;; // dst & 7 | ||
cmp.eq p6,p0=r14,r15 // different alignment? | ||
(p6) br.cond.spnt.few 2f // branch if same alignment | ||
|
||
1: ld1 r14=[in0],1 ;; // copy bytewise | ||
st1 [in1]=r14,1 | ||
add in2=-1,in2 ;; // len-- | ||
cmp.ne p6,p0=r0,in2 | ||
(p6) br.cond.dptk.few 1b // loop | ||
br.ret.sptk.few rp // done | ||
|
||
2: cmp.eq p6,p0=r14,r0 // aligned? | ||
(p6) br.cond.sptk.few 4f | ||
|
||
3: ld1 r14=[in0],1 ;; // copy bytewise | ||
st1 [in1]=r14,1 | ||
extr.u r15=in0,0,3 // src & 7 | ||
add in2=-1,in2 ;; // len-- | ||
cmp.eq p6,p0=r0,in2 // done? | ||
cmp.eq p7,p0=r0,r15 ;; // aligned now? | ||
(p6) br.ret.spnt.few rp // return if done | ||
(p7) br.cond.spnt.few 4f // go to main copy | ||
br.cond.sptk.few 3b // more bytes to copy | ||
|
||
// At this point, in2 is non-zero | ||
|
||
4: mov r14=8 ;; | ||
cmp.ltu p6,p0=in2,r14 ;; // len < 8? | ||
(p6) br.cond.spnt.few 1b // byte copy the end | ||
ld8 r15=[in0],8 ;; // copy word | ||
st8 [in1]=r15,8 | ||
add in2=-8,in2 ;; // len -= 8 | ||
cmp.ne p6,p0=r0,in2 // done? | ||
(p6) br.cond.spnt.few 4b // again | ||
|
||
br.ret.sptk.few rp // return | ||
|
||
// Don't bother optimising overlap case | ||
|
||
5: add in0=in0,in2 | ||
add in1=in1,in2 ;; | ||
add in0=-1,in0 | ||
add in1=-1,in1 ;; | ||
|
||
6: ld1 r14=[in0],-1 ;; | ||
st1 [in1]=r14,-1 | ||
add in2=-1,in2 ;; | ||
cmp.ne p6,p0=r0,in2 | ||
(p6) br.cond.spnt.few 6b | ||
|
||
br.ret.sptk.few rp | ||
END(bcopy) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
/* $NetBSD: bzero.S,v 1.1 2016/08/05 15:06:02 scole Exp $ */ | ||
|
||
/*- | ||
* Copyright (c) 2000 Doug Rabson | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in the | ||
* documentation and/or other materials provided with the distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
* | ||
* __FBSDID("$FreeBSD: releng/10.1/lib/libc/ia64/string/bzero.S 125669 2004-02-10 20:45:28Z cperciva $"); | ||
*/ | ||
|
||
#include <machine/asm.h> | ||
|
||
/* | ||
* void | ||
* bzero(void *b, size_t len); | ||
*/ | ||
ENTRY(bzero, 2) | ||
|
||
cmp.le p6,p0=in1,r0 // bail if len <= 0 | ||
(p6) br.ret.spnt.few rp | ||
;; | ||
mov r14=ar.lc // save ar.lc | ||
|
||
cmp.ltu p6,p0=17,in1 // check for small | ||
(p6) br.dptk.few 3f | ||
|
||
1: add r15=-1,in1 ;; | ||
mov ar.lc=r15 ;; | ||
2: st1 [in0]=r0,1 // zero one byte | ||
br.cloop.sptk.few 2b // loop | ||
|
||
;; | ||
mov ar.lc=r14 // done | ||
br.ret.sptk.few rp | ||
|
||
// Zero up to 8byte alignment | ||
|
||
3: tbit.nz p6,p0=in0,0 ;; | ||
(p6) st1 [in0]=r0,1 | ||
(p6) add in1=-1,in1 ;; | ||
|
||
tbit.nz p6,p0=in0,1 ;; | ||
(p6) st2 [in0]=r0,2 | ||
(p6) add in1=-2,in1 ;; | ||
|
||
tbit.nz p6,p0=in0,2 ;; | ||
(p6) st4 [in0]=r0,4 | ||
(p6) add in1=-4,in1 | ||
|
||
;; | ||
shr.u r15=in1,3 // word count | ||
extr.u in1=in1,0,3 ;; // trailing bytes | ||
cmp.eq p6,p0=r15,r0 // check for zero | ||
cmp.ne p7,p0=in1,r0 | ||
(p6) br.dpnt.few 1b // zero last bytes | ||
|
||
add r15=-1,r15 ;; | ||
mov ar.lc=r15 ;; | ||
4: st8 [in0]=r0,8 | ||
br.cloop.sptk.few 4b | ||
|
||
(p7) br.dpnt.few 1b // zero last bytes | ||
|
||
;; | ||
mov ar.lc=r14 // done | ||
br.ret.sptk.few rp | ||
|
||
END(bzero) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
/* $NetBSD: ffs.S,v 1.1 2016/08/05 15:06:02 scole Exp $ */ | ||
|
||
/* | ||
* Copyright (c) 1995 Christopher G. Demetriou | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in the | ||
* documentation and/or other materials provided with the distribution. | ||
* 3. All advertising materials mentioning features or use of this software | ||
* must display the following acknowledgement: | ||
* This product includes software developed by Christopher G. Demetriou | ||
* for the NetBSD Project. | ||
* 4. The name of the author may not be used to endorse or promote products | ||
* derived from this software without specific prior written permission | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
* __FBSDID("$FreeBSD: releng/10.1/lib/libc/ia64/string/ffs.S 111777 2003-03-03 01:09:46Z obrien $"); | ||
* | ||
*/ | ||
|
||
#include <machine/asm.h> | ||
/* | ||
|
||
/* | ||
* int | ||
* ffs(int value); | ||
*/ | ||
ENTRY(ffs, 1) | ||
sxt4 r14=in0 ;; | ||
cmp.eq p6,p0=r14,r0 | ||
(p6) br.dpnt.few Lallzero | ||
|
||
/* | ||
* Initialize return value (ret0), and set up r15 so that it | ||
* contains the mask with only the lowest bit set. | ||
*/ | ||
sub r15=r0,r14 | ||
mov ret0=1 ;; | ||
and r15=r14,r15 ;; | ||
|
||
extr.u r16=r15,0,8 ;; | ||
cmp.ne p6,p0=r0,r16 | ||
(p6) br.dptk.few Ldo8 | ||
|
||
/* | ||
* If lower 16 bits empty, add 16 to result and use upper 16. | ||
*/ | ||
extr.u r16=r15,0,16 ;; | ||
cmp.ne p6,p0=r0,r16 | ||
(p6) br.dptk.few Ldo16 | ||
extr.u r15=r15,16,16 | ||
add ret0=16,ret0 ;; | ||
|
||
Ldo16: | ||
/* | ||
* If lower 8 bits empty, add 8 to result and use upper 8. | ||
*/ | ||
extr.u r16=r15,0,8 ;; | ||
cmp.ne p6,p0=r0,r16 | ||
(p6) br.dptk.few Ldo8 | ||
extr.u r15=r15,8,24 | ||
add ret0=8,ret0 ;; | ||
|
||
Ldo8: | ||
and r16=0x0f,r15 /* lower 4 of 8 empty? */ | ||
and r17=0x33,r15 /* lower 2 of each 4 empty? */ | ||
and r18=0x55,r15 ;; /* lower 1 of each 2 empty? */ | ||
cmp.ne p6,p0=r16,r0 | ||
cmp.ne p7,p0=r17,r0 | ||
cmp.ne p8,p0=r18,r0 | ||
|
||
/* If lower 4 bits empty, add 4 to result. */ | ||
(p6) br.dptk.few Ldo4 | ||
add ret0=4,ret0 ;; | ||
|
||
Ldo4: /* If lower 2 bits of each 4 empty, add 2 to result. */ | ||
(p7) br.dptk.few Ldo2 | ||
add ret0=2,ret0 ;; | ||
|
||
Ldo2: /* If lower bit of each 2 empty, add 1 to result. */ | ||
(p8) br.dptk.few Ldone | ||
add ret0=1,ret0 | ||
|
||
Ldone: | ||
br.ret.sptk.few rp | ||
|
||
Lallzero: | ||
mov ret0=0 | ||
br.ret.sptk.few rp | ||
END(ffs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* $NetBSD: memcpy.S,v 1.1 2016/08/05 15:06:02 scole Exp $ */ | ||
|
||
/*- | ||
* Copyright (c) 2000 Doug Rabson | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in the | ||
* documentation and/or other materials provided with the distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
* | ||
* __FBSDID("$FreeBSD: releng/10.1/lib/libc/ia64/string/memcpy.S 134739 2004-09-04 00:04:58Z marcel $"); | ||
*/ | ||
|
||
#include <machine/asm.h> | ||
|
||
/* | ||
* void * | ||
* memcpy(void * restrict dst, const void * restrict src, size_t len); | ||
*/ | ||
ENTRY(memcpy,3) | ||
mov r8 = in0 | ||
mov in0 = in1 | ||
;; | ||
mov in1 = r8 | ||
br.sptk.few bcopy | ||
END(memcpy) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* $NetBSD: memmove.S,v 1.1 2016/08/05 15:06:02 scole Exp $ */ | ||
|
||
/*- | ||
* Copyright (c) 2000 Doug Rabson | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in the | ||
* documentation and/or other materials provided with the distribution. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
* SUCH DAMAGE. | ||
* | ||
* __FBSDID("$FreeBSD: releng/10.1/lib/libc/ia64/string/memmove.S 134743 2004-09-04 00:23:15Z marcel $"); | ||
* | ||
*/ | ||
|
||
#include <machine/asm.h> | ||
|
||
/* | ||
* void * | ||
* memmove(void *dst, const void *src, size_t len); | ||
*/ | ||
ENTRY(memmove,3) | ||
mov r8 = in0 | ||
mov in0 = in1 | ||
;; | ||
mov in1 = r8 | ||
br.sptk.few bcopy | ||
END(memmove) |