/* Copy SRC to DEST returning the address of the terminating '\0' in DEST.
   For SPARC v9.
   Copyright (C) 1998-2014 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and
                  Jakub Jelinek <jj@ultra.linux.cz>.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#include <sysdep.h>
#include <asm/asi.h>
#ifndef XCC
	.register	%g2, #scratch
	.register	%g3, #scratch
	.register	%g6, #scratch
#endif

	/* Normally, this uses
	   ((xword - 0x0101010101010101) & 0x8080808080808080) test
	   to find out if any byte in xword could be zero. This is fast, but
	   also gives false alarm for any byte in range 0x81-0xff. It does
	   not matter for correctness, as if this test tells us there could
	   be some zero byte, we check it byte by byte, but if bytes with
	   high bits set are common in the strings, then this will give poor
	   performance. You can #define EIGHTBIT_NOT_RARE and the algorithm
	   will use one tick slower, but more precise test
	   ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080),
	   which does not give any false alarms (but if some bits are set,
	   one cannot assume from it which bytes are zero and which are not).
	   It is yet to be measured, what is the correct default for glibc
	   in these days for an average user.
	 */

	.text
	.align		32
ENTRY(__stpcpy)
	sethi		%hi(0x01010101), %g1		/* IEU0		Group		*/
	or		%g1, %lo(0x01010101), %g1	/* IEU0		Group		*/
	andcc		%o0, 7, %g0			/* IEU1				*/
	sllx		%g1, 32, %g2			/* IEU0		Group		*/

	bne,pn		%icc, 12f			/* CTI				*/
	 andcc		%o1, 7, %g3			/* IEU1				*/
	or		%g1, %g2, %g1			/* IEU0		Group		*/
	bne,pn		%icc, 14f			/* CTI				*/

	 sllx		%g1, 7, %g2			/* IEU0		Group		*/
1:	ldx		[%o1], %o3			/* Load				*/
	add		%o1, 8, %o1			/* IEU1				*/
2:	mov		%o3, %g3			/* IEU0		Group		*/

	sub		%o3, %g1, %o2			/* IEU1				*/
3:	ldxa		[%o1] ASI_PNF, %o3		/* Load				*/
#ifdef EIGHTBIT_NOT_RARE
	andn		%o2, %g3, %o2			/* IEU0		Group		*/
#endif
	add		%o0, 8, %o0			/* IEU0		Group		*/
	andcc		%o2, %g2, %g0			/* IEU1				*/

	add		%o1, 8, %o1			/* IEU0		Group		*/
	be,a,pt		%xcc, 2b			/* CTI				*/
	 stx		%g3, [%o0 - 8]			/* Store			*/
	srlx		%g3, 56, %g5			/* IEU0		Group		*/

	andcc		%g5, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 11f			/* CTI				*/
	 srlx		%g3, 48, %g4			/* IEU0				*/
	andcc		%g4, 0xff, %g0			/* IEU1		Group		*/

	be,pn		%icc, 10f			/* CTI				*/
	 srlx		%g3, 40, %g5			/* IEU0				*/
	andcc		%g5, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 9f			/* CTI				*/

	 srlx		%g3, 32, %g4			/* IEU0				*/
	andcc		%g4, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 8f			/* CTI				*/
	 srlx		%g3, 24, %g5			/* IEU0				*/

	andcc		%g5, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 7f			/* CTI				*/
	 srlx		%g3, 16, %g4			/* IEU0				*/
	andcc		%g4, 0xff, %g0			/* IEU1		Group		*/

	be,pn		%icc, 6f			/* CTI				*/
	 srlx		%g3, 8, %g5			/* IEU0				*/
	andcc		%g5, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 5f			/* CTI				*/

	 sub		%o3, %g1, %o2			/* IEU0				*/
	stx		%g3, [%o0 - 8]			/* Store	Group		*/
	andcc		%g3, 0xff, %g0			/* IEU1				*/
	bne,pt		%icc, 3b			/* CTI				*/

	 mov		%o3, %g3			/* IEU0		Group		*/
4:	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, 1, %o0			/* IEU0				*/

	.align		16
6:	ba,pt		%xcc, 23f			/* CTI		Group		*/
	 sub		%o0, 3, %g6			/* IEU0				*/
5:	sub		%o0, 2, %g6			/* IEU0		Group		*/
	stb		%g5, [%o0 - 2]			/* Store			*/

	srlx		%g3, 16, %g4			/* IEU0		Group		*/
23:	sth		%g4, [%o0 - 4]			/* Store			*/
	srlx		%g3, 32, %g4			/* IEU0		Group		*/
	stw		%g4, [%o0 - 8]			/* Store			*/

	retl						/* CTI+IEU1	Group		*/
	 mov		%g6, %o0			/* IEU0				*/
8:	ba,pt		%xcc, 24f			/* CTI		Group		*/
	 sub		%o0, 5, %g6			/* IEU0				*/

7:	sub		%o0, 4, %g6			/* IEU0		Group		*/
	stb		%g5, [%o0 - 4]			/* Store			*/
	srlx		%g3, 32, %g4			/* IEU0		Group		*/
24:	stw		%g4, [%o0 - 8]			/* Store			*/

	retl						/* CTI+IEU1	Group		*/
	 mov		%g6, %o0 			/* IEU0				*/
10:	ba,pt		%xcc, 25f			/* CTI		Group		*/
	 sub		%o0, 7, %g6			/* IEU0				*/

9:	sub		%o0, 6, %g6			/* IEU0		Group		*/
	stb		%g5, [%o0 - 6]			/* Store			*/
	srlx		%g3, 48, %g4			/* IEU0				*/
25:	sth		%g4, [%o0 - 8]			/* Store	Group		*/

	retl						/* CTI+IEU1	Group		*/
	 mov		%g6, %o0			/* IEU0				*/
11:	stb		%g5, [%o0 - 8]			/* Store	Group		*/
	retl						/* CTI+IEU1	Group		*/

	 sub		%o0, 8, %o0			/* IEU0				*/

	.align		16
12:	or		%g1, %g2, %g1			/* IEU0		Group		*/
	ldub		[%o1], %o3			/* Load				*/
	sllx		%g1, 7, %g2			/* IEU0		Group		*/
	stb		%o3, [%o0]			/* Store	Group		*/

13:	add		%o0, 1, %o0			/* IEU0				*/
	add		%o1, 1, %o1			/* IEU1				*/
	andcc		%o3, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 4b			/* CTI				*/

	 lduba		[%o1] ASI_PNF, %o3		/* Load				*/
	andcc		%o0, 7, %g0			/* IEU1		Group		*/
	bne,a,pt	%icc, 13b			/* CTI				*/
	 stb		%o3, [%o0]			/* Store			*/

	andcc		%o1, 7, %g3			/* IEU1		Group		*/
	be,a,pt		%icc, 1b			/* CTI				*/
	 ldx		[%o1], %o3			/* Load				*/
14:	orcc		%g0, 64, %g4			/* IEU1		Group		*/

	sllx		%g3, 3, %g5			/* IEU0				*/
	sub		%o1, %g3, %o1			/* IEU0		Group		*/
	sub		%g4, %g5, %g4			/* IEU1				*/
							/* %g1 = 0101010101010101	*
							 * %g2 = 8080808080808080	*
							 * %g3 = source alignment	*
							 * %g5 = number of bits to shift left  *
							 * %g4 = number of bits to shift right */
	ldxa		[%o1] ASI_PNF, %o5		/* Load		Group		*/

	addcc		%o1, 8, %o1			/* IEU1				*/
15:	sllx		%o5, %g5, %o3			/* IEU0		Group		*/
	ldxa		[%o1] ASI_PNF, %o5		/* Load				*/
	srlx		%o5, %g4, %o4			/* IEU0		Group		*/

	add		%o0, 8, %o0			/* IEU1				*/
	or		%o3, %o4, %o3			/* IEU0		Group		*/
	add		%o1, 8, %o1			/* IEU1				*/
	sub		%o3, %g1, %o4			/* IEU0		Group		*/

#ifdef EIGHTBIT_NOT_RARE
	andn		%o4, %o3, %o4			/* IEU0		Group		*/
#endif
	andcc		%o4, %g2, %g0			/* IEU1		Group		*/
	be,a,pt		%xcc, 15b			/* CTI				*/
	 stx		%o3, [%o0 - 8]			/* Store			*/
	srlx		%o3, 56, %o4			/* IEU0		Group		*/

	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 22f			/* CTI				*/
	 srlx		%o3, 48, %o4			/* IEU0				*/
	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/

	be,pn		%icc, 21f			/* CTI				*/
	 srlx		%o3, 40, %o4			/* IEU0				*/
	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 20f			/* CTI				*/

	 srlx		%o3, 32, %o4			/* IEU0				*/
	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 19f			/* CTI				*/
	 srlx		%o3, 24, %o4			/* IEU0				*/

	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 18f			/* CTI				*/
	 srlx		%o3, 16, %o4			/* IEU0				*/
	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/

	be,pn		%icc, 17f			/* CTI				*/
	 srlx		%o3, 8, %o4			/* IEU0				*/
	andcc		%o4, 0xff, %g0			/* IEU1		Group		*/
	be,pn		%icc, 16f			/* CTI				*/

	 andcc		%o3, 0xff, %g0			/* IEU1		Group		*/
	bne,pn		%icc, 15b			/* CTI				*/
	 stx		%o3, [%o0 - 8]			/* Store			*/
	retl						/* CTI+IEU1	Group		*/

	 sub		%o0, 1, %o0			/* IEU0				*/

	.align		16
17:	ba,pt		%xcc, 26f			/* CTI		Group		*/
	 subcc		%o0, 3, %g6			/* IEU1				*/
18:	ba,pt		%xcc, 27f			/* CTI		Group		*/
	 subcc		%o0, 4, %g6			/* IEU1				*/

19:	ba,pt		%xcc, 28f			/* CTI		Group		*/
	 subcc		%o0, 5, %g6			/* IEU1				*/
16:	subcc		%o0, 2, %g6			/* IEU1		Group		*/
	srlx		%o3, 8, %o4			/* IEU0				*/

	stb		%o4, [%o0 - 2]			/* Store			*/
26:	srlx		%o3, 16, %o4			/* IEU0		Group		*/
	stb		%o4, [%o0 - 3]			/* Store			*/
27:	srlx		%o3, 24, %o4			/* IEU0		Group		*/

	stb		%o4, [%o0 - 4]			/* Store			*/
28:	srlx		%o3, 32, %o4			/* IEU0		Group		*/
	stw		%o4, [%o0 - 8]			/* Store			*/
	retl						/* CTI+IEU1	Group		*/

	 mov		%g6, %o0 			/* IEU0				*/

	.align		16
21:	ba,pt		%xcc, 29f			/* CTI		Group		*/
	 subcc		%o0, 7, %g6			/* IEU1				*/
22:	ba,pt		%xcc, 30f			/* CTI		Group		*/
	 subcc		%o0, 8, %g6			/* IEU1				*/

20:	subcc		%o0, 6, %g6			/* IEU1		Group		*/
	srlx		%o3, 40, %o4			/* IEU0				*/
	stb		%o4, [%o0 - 6]			/* Store			*/
29:	srlx		%o3, 48, %o4			/* IEU0		Group		*/

	stb		%o4, [%o0 - 7]			/* Store			*/
30:	srlx		%o3, 56, %o4			/* IEU0		Group		*/
	stb		%o4, [%o0 - 8]			/* Store			*/
	retl						/* CTI+IEU1	Group		*/

	 mov		%g6, %o0			/* IEU0				*/
END(__stpcpy)

weak_alias (__stpcpy, stpcpy)
libc_hidden_def (__stpcpy)
libc_hidden_builtin_def (stpcpy)
