From: Roland McGrath Date: Wed, 13 May 1992 02:52:32 +0000 (+0000) Subject: entered into RCS X-Git-Tag: upstream/2.30~10627^2~4355 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a238abcb880dce8d3f149eedaafedde8894d03a9;p=external%2Fglibc.git entered into RCS --- diff --git a/sysdeps/vax/bcmp.s b/sysdeps/vax/bcmp.s new file mode 100644 index 0000000..d980feb --- /dev/null +++ b/sysdeps/vax/bcmp.s @@ -0,0 +1,57 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)bcmp.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* bcmp(s1, s2, n) */ + +#include "DEFS.h" + +ENTRY(bcmp, 0) + movl 4(ap),r1 + movl 8(ap),r3 + movl 12(ap),r4 +1: + movzwl $65535,r0 + cmpl r4,r0 + jleq 2f + subl2 r0,r4 + cmpc3 r0,(r1),(r3) + jeql 1b + addl2 r4,r0 + ret +2: + cmpc3 r4,(r1),(r3) + ret diff --git a/sysdeps/vax/bcopy.s b/sysdeps/vax/bcopy.s new file mode 100644 index 0000000..43bb93d --- /dev/null +++ b/sysdeps/vax/bcopy.s @@ -0,0 +1,78 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)bcopy.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* bcopy(from, to, size) */ + +#include "DEFS.h" + +ENTRY(bcopy, R6) + movl 4(ap),r1 + movl 8(ap),r3 + movl 12(ap),r6 + cmpl r1,r3 + bgtr 2f # normal forward case + blss 3f # overlapping, must do backwards + ret # equal, nothing to do +1: + subl2 r0,r6 + movc3 r0,(r1),(r3) +2: + movzwl $65535,r0 + cmpl r6,r0 + jgtr 1b + movc3 r6,(r1),(r3) + ret +3: + addl2 r6,r1 + addl2 r6,r3 + movzwl $65535,r0 + jbr 5f +4: + subl2 r0,r6 + subl2 r0,r1 + subl2 r0,r3 + movc3 r0,(r1),(r3) + movzwl $65535,r0 + subl2 r0,r1 + subl2 r0,r3 +5: + cmpl r6,r0 + jgtr 4b + subl2 r6,r1 + subl2 r6,r3 + movc3 r6,(r1),(r3) + ret diff --git a/sysdeps/vax/bzero.s b/sysdeps/vax/bzero.s new file mode 100644 index 0000000..5f90763 --- /dev/null +++ b/sysdeps/vax/bzero.s @@ -0,0 +1,53 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)bzero.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* bzero(base, length) */ + +#include "DEFS.h" + +ENTRY(bzero, 0) + movl 4(ap),r3 + jbr 2f +1: + subl2 r0,8(ap) + movc5 $0,(r3),$0,r0,(r3) +2: + movzwl $65535,r0 + cmpl 8(ap),r0 + jgtr 1b + movc5 $0,(r3),$0,8(ap),(r3) + ret diff --git a/sysdeps/vax/ffs.s b/sysdeps/vax/ffs.s new file mode 100644 index 0000000..49faffb --- /dev/null +++ b/sysdeps/vax/ffs.s @@ -0,0 +1,48 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)ffs.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* bit = ffs(value) */ + +#include "DEFS.h" + +ENTRY(ffs, 0) + ffs $0,$32,4(ap),r0 + bneq 1f + mnegl $1,r0 +1: + incl r0 + ret diff --git a/sysdeps/vax/index.s b/sysdeps/vax/index.s new file mode 100644 index 0000000..e599b27 --- /dev/null +++ b/sysdeps/vax/index.s @@ -0,0 +1,99 @@ +/* + * Copyright (c) 1980 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)index.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find the first occurence of c in the string cp. + * Return pointer to match or null pointer. + * + * char * + * index(cp, c) + * char *cp, c; + */ +#include "DEFS.h" + +ENTRY(index, 0) + movq 4(ap),r1 # r1 = cp; r2 = c + tstl r2 # check for special case c == '\0' + bneq 2f +1: + locc $0,$65535,(r1) # just find end of string + beql 1b # still looking + movl r1,r0 # found it + ret +2: + moval tbl,r3 # r3 = address of table + bbss $0,(r3),5f # insure not reentering + movab (r3)[r2],r5 # table entry for c + incb (r5) + movzwl $65535,r4 # fast access +3: + scanc r4,(r1),(r3),$1 # look for c or '\0' + beql 3b # still looking + movl r1,r0 # return pointer to char + tstb (r0) # if have found '\0' + bneq 4f + clrl r0 # else return 0 +4: + clrb (r5) # clean up table + clrb (r3) + ret + + .data +tbl: .space 256 + .text + +/* + * Reentrant, but slower version of index + */ +5: + movl r1,r3 +6: + locc $0,$65535,(r3) # look for '\0' + bneq 7f + locc r2,$65535,(r3) # look for c + bneq 8f + movl r1,r3 # reset pointer and ... + jbr 6b # ... try again +7: + subl3 r3,r1,r4 # length of short block + incl r4 # +1 for '\0' + locc r2,r4,(r3) # look for c + bneq 8f + ret +8: + movl r1,r0 # return pointer to char + ret diff --git a/sysdeps/vax/memchr.s b/sysdeps/vax/memchr.s new file mode 100644 index 0000000..c7793fb --- /dev/null +++ b/sysdeps/vax/memchr.s @@ -0,0 +1,73 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)memchr.s 5.1 (Berkeley) 5/29/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find the first occurence of c in the memory at cp (length n). + * Return pointer to match or null pointer. + * + * This code optimises the usual case (0 < n < 65535). + * + * void * + * memchr(cp, c, n) + * char *cp, c; + * size_t n; + */ + +#include "DEFS.h" + +ENTRY(memchr, 0) + movq 4(ap),r1 # r1 = cp; r2 = c + movl 12(ap),r0 # r0 = n + movzwl $65535,r4 # handy constant +0: + cmpl r0,r4 # check for annoying locc limit + bgtru 3f + + /* n <= 65535 */ + locc r2,r0,(r1) # search n bytes for c + beql 2f # done if not found (r0 already 0) +1: /* found character c at (r1) */ + movl r1,r0 +2: + ret + +3: /* n > 65535 */ + locc r2,r4,(r1) # search 65535 bytes for c + beql 1b # done if found + decw r0 # from 0 to 65535 + subl2 r0,r4 # adjust n + brb 0b # and loop diff --git a/sysdeps/vax/memcmp.s b/sysdeps/vax/memcmp.s new file mode 100644 index 0000000..3854fd8 --- /dev/null +++ b/sysdeps/vax/memcmp.s @@ -0,0 +1,61 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)memcmp.s 5.1 (Berkeley) 5/15/90" +#endif /* LIBC_SCCS and not lint */ + +/* int memcmp(s1, s2, n) */ + +#include "DEFS.h" + +ENTRY(memcmp, 0) + movl 4(ap),r1 /* r1 = s1 */ + movq 8(ap),r3 /* r3 = s2; r4 = n */ + movzwl $65535,r5 +0: + cmpl r4,r5 + jgtru 3f /* handle stupid cmpc3 limitation */ + cmpc3 r4,(r1),(r3) /* compare */ + beql 2f /* done if same (r0 = 0) */ +1: + movzbl (r1),r0 + movzbl (r3),r2 + subl2 r2,r0 /* return *s1 - *s2; s1,s2 unsigned chars */ +2: + ret +3: + subl2 r5,r4 /* do 64K; adjust count */ + cmpc3 r5,(r1),(r3) + jeql 0b /* loop if same */ + jbr 1b diff --git a/sysdeps/vax/memmove.s b/sysdeps/vax/memmove.s new file mode 100644 index 0000000..8f897fa --- /dev/null +++ b/sysdeps/vax/memmove.s @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)memmove.s 5.1 (Berkeley) 5/15/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * void *memmove(dst, src, size) + * returns dst + * + * This optimises the usual case (count < 65536) at the expense + * of some extra memory references and branches when count >= 65536. + */ + +#include "DEFS.h" + +ENTRY(memmove, 0) + movzwl $65535,r0 /* r0 = 64K (needed below) */ + movq 8(ap),r1 /* r1 = src, r2 = length */ + movl 4(ap),r3 /* r3 = dst */ + cmpl r1,r3 + bgtru 1f /* normal forward case */ + beql 2f /* equal, nothing to do */ + addl2 r2,r1 /* overlaps iff srcdst */ + cmpl r1,r3 + bgtru 4f /* overlapping, must move backwards */ + subl2 r2,r1 + +1: /* move forward */ + cmpl r2,r0 + bgtru 3f /* stupid movc3 limitation */ + movc3 r2,(r1),(r3) /* move it all */ +2: + movl 4(ap),r0 /* return original dst */ + ret +3: + subl2 r0,12(ap) /* adjust length by 64K */ + movc3 r0,(r1),(r3) /* move 64K */ + movl 12(ap),r2 + decw r0 /* from 0 to 65535 */ + brb 1b /* retry */ + +4: /* move backward */ + addl2 r2,r3 +5: + cmpl r2,r0 + bgtru 6f /* stupid movc3 limitation */ + subl2 r2,r1 + subl2 r2,r3 + movc3 r2,(r1),(r3) /* move it all */ + movl 4(ap),r0 /* return original dst */ + ret +6: + subl2 r0,12(ap) /* adjust length by 64K */ + subl2 r0,r1 + subl2 r0,r3 + movc3 r0,(r1),(r3) /* move 64K */ + movl 12(ap),r2 + decw r0 + subl2 r0,r1 + subl2 r0,r3 + brb 5b diff --git a/sysdeps/vax/memset.s b/sysdeps/vax/memset.s new file mode 100644 index 0000000..12b1f74 --- /dev/null +++ b/sysdeps/vax/memset.s @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)memset.s 5.2 (Berkeley) 5/12/91" +#endif /* LIBC_SCCS and not lint */ + +/* void *memset(base, c, length) */ + +#include "DEFS.h" + +ENTRY(memset, 0) + movl 4(ap),r3 +1: + movzwl $65535,r0 + movq 8(ap),r1 + cmpl r2,r0 + jgtru 2f + movc5 $0,(r3),r1,r2,(r3) + movl r1,r0 + ret +2: + subl2 r0,12(ap) + movc5 $0,(r3),r1,r0,(r3) + jbr 1b diff --git a/sysdeps/vax/rindex.s b/sysdeps/vax/rindex.s new file mode 100644 index 0000000..76d7e29 --- /dev/null +++ b/sysdeps/vax/rindex.s @@ -0,0 +1,113 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)rindex.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find the last occurence of c in the string cp. + * Return pointer to match or null pointer. + * + * char * + * rindex(cp, c) + * char *cp, c; + */ +#include "DEFS.h" + +ENTRY(rindex, 0) + movq 4(ap),r1 # r1 = cp; r2 = c + tstl r2 # check for special case c == '\0' + bneq 2f +1: + locc $0,$65535,(r1) # just find end of string + beql 1b # still looking + movl r1,r0 # found it + ret +2: + moval tbl,r3 # r3 = address of table + bbss $0,(r3),5f # insure not reentering + movab (r3)[r2],r5 # table entry for c + incb (r5) + clrl r4 # last found +3: + scanc $65535,(r1),(r3),$1 # look for c or '\0' + beql 3b # keep looking + tstb (r1) # if have found '\0' + beql 4f # we are done + movl r1,r4 # save most recently found + incl r1 # skip over character + jbr 3b # keep looking +4: + movl r4,r0 # return last found (if any) + clrb (r5) # clean up table + clrb (r3) + ret + + .data +tbl: .space 256 + .text + +/* + * Reentrant, but slower version of rindex + */ +5: + movl r1,r3 + clrl r4 # r4 = pointer to last match +6: + locc $0,$65535,(r3) # look for '\0' + bneq 8f + decw r0 # r0 = 65535 +1: + locc r2,r0,(r3) # look for c + bneq 7f + movl r1,r3 # reset pointer and ... + jbr 6b # ... try again +7: + movl r1,r4 # stash pointer ... + addl3 $1,r1,r3 # ... skip over match and ... + decl r0 # ... decrement count + jbr 6b # ... try again +8: + subl3 r3,r1,r0 # length of short block + incl r0 # +1 for '\0' +9: + locc r2,r0,(r3) # look for c + beql 0f + movl r1,r4 # stash pointer ... + addl3 $1,r1,r3 # ... skip over match ... + decl r0 # ... adjust count and ... + jbr 9b # ... try again +0: + movl r4,r0 # return stashed pointer + ret diff --git a/sysdeps/vax/strcat.s b/sysdeps/vax/strcat.s new file mode 100644 index 0000000..7cf8884 --- /dev/null +++ b/sysdeps/vax/strcat.s @@ -0,0 +1,66 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strcat.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Concatenate string s2 to the end of s1 + * and return the base of s1. + * + * char * + * strcat(s1, s2) + * char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strcat, R6|R7) + movq 4(ap), r6 # r6 = s1; r7 = s2 + movl r6,r1 +0: + locc $0,$65535,(r1) # look for '\0' + beql 0b + movl r1,r3 # save end of s1 +1: + locc $0,$65535,(r7) # find length of s2 + bneq 2f + movc3 $65535,(r7),(r3)# copy full block + movl r1,r7 + jbr 1b +2: + subl2 r7,r1 # calculate length + incl r1 + movc3 r1,(r7),(r3) # copy remainder + movl r6,r0 + ret diff --git a/sysdeps/vax/strchr.s b/sysdeps/vax/strchr.s new file mode 100644 index 0000000..18b5383 --- /dev/null +++ b/sysdeps/vax/strchr.s @@ -0,0 +1,105 @@ +/* + * Copyright (c) 1988 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strchr.s 5.4 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find the first occurence of c in the string cp. + * Return pointer to match or null pointer. + * + * char * + * strchr(cp, c) + * char *cp, c; + */ +#include "DEFS.h" + + .lcomm tbl,256 + +ENTRY(strchr, 0) + movzwl $65535,r4 /* handy constant */ + movq 4(ap),r1 /* r1 = cp; r2 = c */ + movzbl r2,r2 + beql Lzero /* special case for c == '\0' */ + +/* + * Fancy scanc version. Alas, it is not reentrant. + */ + movab tbl,r3 /* r3 = base of table */ + bbss $0,(r3),Lreent /* ensure not reentering */ + movab (r3)[r2],r5 + incb (r5) /* mark both '\0' and c */ +0: + scanc r4,(r1),(r3),$1 /* look for c or '\0' */ + beql 0b /* still looking */ + movl r1,r0 /* return whatever we found */ + tstb (r0) + bneq 1f # unless it was '\0': + clrl r0 # then return NULL +1: + clrb (r5) /* clean up table */ + clrb (r3) + ret + +/* + * Special case for \0. + */ +Lzero: + locc r2,r4,(r1) /* just find end of string */ + beql Lzero /* still looking */ + movl r1,r0 /* found it */ + ret + +/* + * Slower reentrant version is two two-step searches. The first + * phase runs until we know where the string ends; it locates the + * first occurrence of c within a 65535-byte block. If we find + * the end of the string first, we switch to the second phase, + * were we look only up to the known end of string. + */ +Lreent: +0: /* first phase */ + movl r1,r3 + locc $0,r4,(r3) /* look for '\0' */ + bneq 1f + locc r2,r4,(r3) /* look for c */ + beql 0b /* not found: reset pointer and loop */ + movl r1,r0 /* found: return it */ + ret +1: /* second phase */ + subl3 r3,r1,r0 /* length of short block */ + locc r2,r0,(r3) /* look for c */ + beql 2f /* not found: return NULL */ + movl r1,r0 +2: ret diff --git a/sysdeps/vax/strcpy.s b/sysdeps/vax/strcpy.s new file mode 100644 index 0000000..56dbe57 --- /dev/null +++ b/sysdeps/vax/strcpy.s @@ -0,0 +1,62 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strcpy.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Copy string s2 over top of s1. + * Return base of s1. + * + * char * + * strcpy(s1, s2) + * char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strcpy, R6) + movl 4(ap), r3 # r3 = s1 + movl 8(ap), r6 # r6 = s2 +1: + locc $0,$65535,(r6) # find length of s2 + bneq 2f + movc3 $65535,(r6),(r3)# copy full block + movl r1,r6 + jbr 1b +2: + subl2 r6,r1 # calculate length + incl r1 + movc3 r1,(r6),(r3) # copy remainder + movl 4(ap),r0 # return base of s1 + ret diff --git a/sysdeps/vax/strcspn.s b/sysdeps/vax/strcspn.s new file mode 100644 index 0000000..f7b0a99 --- /dev/null +++ b/sysdeps/vax/strcspn.s @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strcspn.s 5.1 (Berkeley) 5/15/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Span the complement of string s2 (skip characters that are not in s2). + * Return the number of characters in s1 that were skipped. + * + * size_t + * strcspn(s1, s2) + * const char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strcspn, 0) + subl2 $32,sp /* make 256 bit table */ + movc5 $0,(sp),$0,$32,(sp) + movq 4(ap),r1 /* r1 = s1, r2 = s2 */ + + /* turn on bit for each character in s2, including '\0' */ +1: + movzbl (r2)+,r0 + bbss r0,(sp),1b + bneq 1b + movl r1,r0 /* r0 = s (current pos in s1) */ + + /* look for a character that is in s2 */ +2: + movzbl (r0)+,r2 /* c = *s++ */ + bbc r2,(sp),2b /* loop until c is in table */ + decl r0 /* s-- */ + subl2 r1,r0 /* r0 = s - s1 = count */ + ret diff --git a/sysdeps/vax/strlen.s b/sysdeps/vax/strlen.s new file mode 100644 index 0000000..2b7e0a7 --- /dev/null +++ b/sysdeps/vax/strlen.s @@ -0,0 +1,52 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strlen.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Return the length of cp (not counting '\0'). + * + * strlen(cp) + * char *cp; + */ +#include "DEFS.h" + +ENTRY(strlen, 0) + movl 4(ap),r1 +1: + locc $0,$65535,(r1) # look for '\0' + beql 1b + subl3 4(ap),r1,r0 # len = cp - base + ret diff --git a/sysdeps/vax/strncat.s b/sysdeps/vax/strncat.s new file mode 100644 index 0000000..bcf29c1 --- /dev/null +++ b/sysdeps/vax/strncat.s @@ -0,0 +1,83 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strncat.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Concatenate string s2 on the end of s1 + * and return the base of s1. The parameter + * n is the maximum length of string s2 to + * concatenate. + * + * char * + * strncat(s1, s2, n) + * char *s1, *s2; + * int n; + */ +#include "DEFS.h" + +ENTRY(strncat, R6) + movl 12(ap),r6 # r6 = n + bleq done # n <= 0 + movl 4(ap),r3 # r3 = s1 + movl r3,r1 +0: + locc $0,$65535,(r1) + beql 0b + movl r1,r3 # r3 = index(s1, '\0'); + movl 8(ap),r1 # r1 = s2 +1: + movzwl $65535,r2 # r2 = bytes in first chunk + cmpl r6,r2 # r2 = min(bytes in chunk, n); + jgeq 2f + movl r6,r2 +2: + subl2 r2,r6 # update n + locc $0,r2,(r1) # '\0' found? + jneq 3f + subl2 r2,r1 # back up pointer updated by locc + movc3 r2,(r1),(r3) # copy in next piece + tstl r6 # run out of space? + jneq 1b + clrb (r3) # force '\0' termination + jbr done +3: + subl2 r0,r2 # r2 = number of bytes to move + subl2 r2,r1 # back up pointer updated by locc + incl r2 # copy '\0' as well + movc3 r2,(r1),(r3) # copy in last piece +done: + movl 4(ap),r0 # return s1 + ret diff --git a/sysdeps/vax/strncmp.s b/sysdeps/vax/strncmp.s new file mode 100644 index 0000000..e5bfcf2 --- /dev/null +++ b/sysdeps/vax/strncmp.s @@ -0,0 +1,89 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strncmp.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Compare at most n characters of string + * s1 lexicographically to string s2. + * Return: + * 0 s1 == s2 + * > 0 s1 > s2 + * < 0 s2 < s2 + * + * strncmp(s1, s2, n) + * char *s1, *s2; + * int n; + */ +#include "DEFS.h" + +ENTRY(strncmp, 0) + movl 4(ap),r1 # r1 = s1 + movq 8(ap),r3 # r3 = s2; r4 = n +1: + clrl r5 # calculate min bytes to next page boundry + subb3 r1,$255,r5 # r5 = (bytes - 1) to end of page for s1 + subb3 r3,$255,r0 # r0 = (bytes - 1) to end of page for s2 + cmpb r0,r5 # r5 = min(r0, r5); + bgtru 2f + movb r0,r5 +2: + incl r5 # r5 = min bytes to next page boundry + cmpl r4,r5 # r5 = min(n, r5); + bgeq 3f + movl r4,r5 +3: + cmpc3 r5,(r1),(r3) # compare strings + bneq 4f + subl2 r5,r4 # check for end of comparison + beql 5f + subl2 r5,r1 # check if found null yet + locc $0,r5,(r1) + beql 1b # not yet done, continue checking + subl2 r0,r3 + mnegb (r3),r0 # r0 = '\0' - *s2 + cvtbl r0,r0 + ret +4: + subl2 r0,r5 # check for null in matching string + subl2 r5,r1 + locc $0,r5,(r1) + bneq 5f + subb3 (r3),(r1),r0 # r0 = *s1 - *s2 + cvtbl r0,r0 + ret +5: + clrl r0 # both the same to null + ret diff --git a/sysdeps/vax/strncpy.s b/sysdeps/vax/strncpy.s new file mode 100644 index 0000000..03a09b7 --- /dev/null +++ b/sysdeps/vax/strncpy.s @@ -0,0 +1,84 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strncpy.s 5.6 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Copy string s2 over top of string s1. + * Truncate or null-pad to n bytes. + * + * char * + * strncpy(s1, s2, n) + * char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strncpy, R6) + movl 12(ap),r6 # r6 = n + bleq done # n <= 0 + movl 4(ap),r3 # r3 = s1 + movl 8(ap),r1 # r1 = s2 +1: + movzwl $65535,r2 # r2 = bytes in first chunk + cmpl r6,r2 # r2 = min(bytes in chunk, n); + jgeq 2f + movl r6,r2 +2: + subl2 r2,r6 # update n + locc $0,r2,(r1) # '\0' found? + jneq 3f + subl2 r2,r1 # back up pointer updated by locc + movc3 r2,(r1),(r3) # copy in next piece + tstl r6 # run out of space? + jneq 1b + jbr done +3: # copy up to '\0' logic + addl2 r0,r6 # r6 = number of null-pad bytes + subl2 r0,r2 # r2 = number of bytes to move + subl2 r2,r1 # back up pointer updated by locc + movc3 r2,(r1),(r3) # copy in last piece +4: # null-pad logic + movzwl $65535,r2 # r2 = bytes in first chunk + cmpl r6,r2 # r2 = min(bytes in chunk, n); + jgeq 5f + movl r6,r2 +5: + subl2 r2,r6 # update n + movc5 $0,(r3),$0,r2,(r3)# pad with '\0's + tstl r6 # finished padding? + jneq 4b +done: + movl 4(ap),r0 # return s1 + ret diff --git a/sysdeps/vax/strpbrk.s b/sysdeps/vax/strpbrk.s new file mode 100644 index 0000000..0d1b25e --- /dev/null +++ b/sysdeps/vax/strpbrk.s @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strpbrk.s 5.1 (Berkeley) 5/15/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find in s1 the first occurrence of any character from s2. + * If there are none, return NULL. + * + * char * + * strpbrk(s1, s2) + * const char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strpbrk, 0) + subl2 $32,sp /* make 256 bit table */ + movc5 $0,(sp),$0,$32,(sp) + movq 4(ap),r0 /* r0 = s1, r1 = s2 */ + + /* turn on bit for each character in s2, including '\0' */ +1: + movzbl (r1)+,r2 + bbss r2,(sp),1b + bneq 1b + + /* look for a character that is in s2 */ +2: + movzbl (r0)+,r2 /* c = *s++ */ + bbc r2,(sp),2b /* loop until c is in table */ + beql 3f /* if c==0, go return NULL */ + decl r0 /* s-- */ + ret +3: + clrl r0 + ret diff --git a/sysdeps/vax/strrchr.s b/sysdeps/vax/strrchr.s new file mode 100644 index 0000000..f292eac --- /dev/null +++ b/sysdeps/vax/strrchr.s @@ -0,0 +1,114 @@ +/* + * Copyright (c) 1988 Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strrchr.s 5.4 (Berkeley) 6/1/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find the last occurence of c in the string cp. + * Return pointer to match or null pointer. + * + * char * + * strrchr(cp, c) + * char *cp, c; + */ +#include "DEFS.h" + + .lcomm tbl,256 + +ENTRY(strrchr, 0) + movzwl $65535,r4 /* handy 65535 */ + movq 4(ap),r1 /* r1 = cp; r2 = c */ + movzbl r2,r2 + beql Lzero /* special case for c == '\0' */ + + clrl r5 /* r5 = pointer to last match */ + +/* + * Fancy scanc version. Alas, it is not reentrant. + */ + movab tbl,r3 /* r3 = address of table */ + bbss $0,(r3),Lreent /* ensure not reentering */ + movab (r3)[r2],r4 + incb (r4) /* mark both '\0' and c */ +0: + scanc $65535,(r1),(r3),$1 /* look for c or '\0' */ + beql 0b /* keep looking */ + tstb (r1) + beql 1f /* done if '\0' */ + movab (r1)+,r5 /* save most recently found, and skip over it */ + jbr 0b /* keep looking */ +1: + movl r5,r0 /* return last found (if any) */ + clrb (r4) /* clean up table */ + clrb (r3) + ret + +/* + * Special case for \0. + */ +Lzero: + locc $0,r4,(r1) /* just find end of string */ + beql Lzero /* still looking */ + movl r1,r0 /* found it */ + ret + +/* + * Slower reentrant version is two two-step searches. The first + * phase runs until we know where the string ends; it locates any + * occurrences of c within a 65535-byte block. Once we have found + * the end of the string, we find any further occurrences before + * that location. + */ +Lreent: +0: /* first phase */ + movl r1,r3 + locc $0,r4,(r3) /* look for '\0' */ + bneq 1f + locc r2,r4,(r3) /* continue phase 1 search for c */ + beql 0b + movab (r1)+,r5 /* found c: save and increment pointer */ + brb 0b /* and continue */ + +1: /* second phase */ + subl3 r3,r1,r0 /* length of short block */ + movl r3,r1 +2: + locc r2,r0,(r1) /* look for c */ + beql 3f /* skip if not found */ + movab (r1)+,r5 /* save pointer as before */ + sobgtr r0,2b /* adjust count and loop */ +3: + movl r5,r0 /* return stashed pointer */ + ret diff --git a/sysdeps/vax/strsep.s b/sysdeps/vax/strsep.s new file mode 100644 index 0000000..9751acc --- /dev/null +++ b/sysdeps/vax/strsep.s @@ -0,0 +1,85 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strsep.s 5.1 (Berkeley) 5/15/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Get next word from string *stringp, where words are + * strings separated by characters from delim. + * + * Writes NULs into the string at *stringp to end tokens. + * On return, *stringp points past the last NUL written (if there might + * be further tokens), or is NULL (if there are definitely no more tokens). + * + * If *stringp is NULL, strtoken returns NULL. + * + * char * + * strtoken(stringp, delim) + * register char **stringp; + * register char const *delim; + */ +#include "DEFS.h" + +ENTRY(strsep, 0) + tstl *4(ap) /* if (*stringp == NULL) */ + bneq 0f + clrl r0 # return (NULL); + ret + +0: + subl2 $32,sp /* make room for 256 bit table */ + movc5 $0,(sp),$0,$32,(sp) + movq 4(ap),r1 /* r1 = stringp, r2 = delim */ + + /* turn on bit for each character in s2, including '\0' */ +1: + movzbl (r2)+,r0 + bbss r0,(sp),1b + bneq 1b + + movl (r1),r3 /* r3 = s = *stringp */ + movl r3,r0 /* save return value */ + + /* scan for delimiters */ +2: + movzbl (r3)+,r2 /* c = *s++ */ + bbc r2,(sp),2b /* loop until c is in table */ + beql 3f + clrb -1(r3) /* if c!='\0', s[-1] = 0 */ + movl r3,(r1) /* and *stringp = s */ + ret +3: + clrl (r1) /* else *stringp = NULL */ + ret diff --git a/sysdeps/vax/strspn.s b/sysdeps/vax/strspn.s new file mode 100644 index 0000000..fc86af7 --- /dev/null +++ b/sysdeps/vax/strspn.s @@ -0,0 +1,70 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strspn.s 5.1 (Berkeley) 5/15/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Span the string s2 (skip characters that are in s2). + * Return the number of characters in s1 that were skipped. + * + * size_t + * strspn(s1, s2) + * const char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strspn, 0) + subl2 $32,sp /* make 256 bit table */ + movc5 $0,(sp),$0,$32,(sp) + movq 4(ap),r1 /* r1 = s1, r2 = s2 */ + + /* turn on bit for each character in s2, including '\0' */ +1: + movzbl (r2)+,r0 + bbss r0,(sp),1b + bneq 1b + + /* now clear bit for '\0' */ + /* (this is easier than avoiding setting it in the first place) */ + bicb2 $1,(sp) /* stop at '\0' */ + movl r1,r0 /* r0 = s (current pos in s1) */ + + /* look for a character that is not in s2 */ +2: + movzbl (r0)+,r2 /* c = *s++ */ + bbs r2,(sp),2b /* loop while c is in table */ + decl r0 /* s-- */ + subl2 r1,r0 /* r0 = s - s1 = count */ + ret diff --git a/sysdeps/vax/strstr.s b/sysdeps/vax/strstr.s new file mode 100644 index 0000000..2e53375 --- /dev/null +++ b/sysdeps/vax/strstr.s @@ -0,0 +1,113 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)strstr.s 5.2 (Berkeley) 8/21/90" +#endif /* LIBC_SCCS and not lint */ + +/* + * Find the first occurrence of s2 as a substring in s1. + * If s2 is empty, return s1. + * + * char *strstr(s1, s2) + * const char *s1, *s2; + */ +#include "DEFS.h" + +ENTRY(strstr, 0) + movq 4(ap),r3 /* r3 = s1, r4 = s2 */ + movzwl $65535,r2 /* r2 = locc/matchc limit */ + locc $0,r2,(r4) /* find '\0' in s2 */ + beql 4f + subl3 r4,r1,r5 /* r5 = strlen(s2) */ + beql 1f /* if r5 == 0, return s1 */ + + /* + * s2 is short enough to apply matchc. + * If s1 is long, we have to do it in stages. + */ +0: locc $0,r2,(r3) /* find '\0' in s1 */ + beql 3f + + /* + * Both strings are `short'; we can use matchc directly. + */ + subl3 r3,r1,r1 /* r1 = strlen(s1) */ + matchc r5,(r4),r1,(r3) /* find substring */ + bneq 2f + + /* + * r3 points r5 bytes past match. Return the match. + */ +1: subl3 r5,r3,r0 /* return (byte_past_match - strlen(s2)) */ + ret + + /* + * There is no matching substring. + */ +2: clrl r0 /* return NULL */ + ret + + /* + * s1 is too long (> 65535 bytes) to apply matchc directly, + * but s2 is short enough. Apply s2 to s1, then (if not + * found yet) advancing s1 by (65536-strlen(s2)) bytes and + * loop. + */ +3: matchc r5,(r4),r2,(r3) /* search */ + beql 1b /* if found, go return it */ + decw r2 /* from 0 to 65535 */ + incl r3 /* already advanced 65535, now 65536 */ + subl2 r5,r3 /* ... minus strlen(s2) */ + brb 0b + + /* + * s2 is too long (> 65535 bytes) to bother with matchc. + */ +4: locc $0,r2,(r1) /* continue working on strlen(s2) */ + beql 4b + subl3 r1,r4,r5 /* r5 = strlen(s2) */ + movb (r4)+,r2 /* r2 = *s2++ */ + decl r5 /* fix up length */ +5: movb (r3)+,r0 /* r0 = *s1++ */ + beql 2b /* if '\0', return NULL */ + cmpb r0,r2 + bneq 5b /* loop until first char found */ + pushr R5|R4|R3|R2 /* save c, s1, s2, n */ + pushr R5|R4|R3 /* strncmp(s1, s2, n) */ + calls $3,_strncmp + popr R2|R3|R4|R5 /* restore */ + tstl r0 + bneq 5b /* loop until strncmp says rest same too */ + subl3 $1,r3,r0 /* return previous s1 */ + ret