Module Name:    src
Committed By:   scole
Date:           Fri Aug  5 15:06:02 UTC 2016

Added Files:
        src/common/lib/libc/arch/ia64/string: bcopy.S bzero.S ffs.S memcpy.S
            memmove.S

Log Message:
PR port-ia64/51261

Imported from FreeBSD with a minor change or two


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/common/lib/libc/arch/ia64/string/bcopy.S \
    src/common/lib/libc/arch/ia64/string/bzero.S \
    src/common/lib/libc/arch/ia64/string/ffs.S \
    src/common/lib/libc/arch/ia64/string/memcpy.S \
    src/common/lib/libc/arch/ia64/string/memmove.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/common/lib/libc/arch/ia64/string/bcopy.S
diff -u /dev/null src/common/lib/libc/arch/ia64/string/bcopy.S:1.1
--- /dev/null	Fri Aug  5 15:06:02 2016
+++ src/common/lib/libc/arch/ia64/string/bcopy.S	Fri Aug  5 15:06:02 2016
@@ -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)
Index: src/common/lib/libc/arch/ia64/string/bzero.S
diff -u /dev/null src/common/lib/libc/arch/ia64/string/bzero.S:1.1
--- /dev/null	Fri Aug  5 15:06:02 2016
+++ src/common/lib/libc/arch/ia64/string/bzero.S	Fri Aug  5 15:06:02 2016
@@ -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)
Index: src/common/lib/libc/arch/ia64/string/ffs.S
diff -u /dev/null src/common/lib/libc/arch/ia64/string/ffs.S:1.1
--- /dev/null	Fri Aug  5 15:06:02 2016
+++ src/common/lib/libc/arch/ia64/string/ffs.S	Fri Aug  5 15:06:02 2016
@@ -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)
Index: src/common/lib/libc/arch/ia64/string/memcpy.S
diff -u /dev/null src/common/lib/libc/arch/ia64/string/memcpy.S:1.1
--- /dev/null	Fri Aug  5 15:06:02 2016
+++ src/common/lib/libc/arch/ia64/string/memcpy.S	Fri Aug  5 15:06:02 2016
@@ -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)
Index: src/common/lib/libc/arch/ia64/string/memmove.S
diff -u /dev/null src/common/lib/libc/arch/ia64/string/memmove.S:1.1
--- /dev/null	Fri Aug  5 15:06:02 2016
+++ src/common/lib/libc/arch/ia64/string/memmove.S	Fri Aug  5 15:06:02 2016
@@ -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)

Reply via email to