/* strspn (str, ss) -- Return the length of the maximum initial segment
		       of S which contains only characters in ACCEPT.
   For SPARC v9.
   Copyright (C) 1999-2018 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by 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
#define XCC xcc
#define STACK_SIZE	128
#define STACK_OFFSET	128+0x7ff
	.register	%g2, #scratch
#else
#define STACK_SIZE	64
#define STACK_OFFSET	64
#endif

	.text
	.align		32
ENTRY(strspn)
	sub		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	mov		1, %o4				/* IEU1				*/
	stx		%g0, [%sp + STACK_OFFSET]	/* Store	Group		*/
	mov		%o0, %g4			/* IEU0				*/

	stx		%g0, [%sp + STACK_OFFSET + 8]	/* Store	Group		*/
	add		%sp, STACK_OFFSET, %o5		/* IEU0				*/
	stx		%g0, [%sp + STACK_OFFSET + 16]	/* Store	Group		*/
	stx		%g0, [%sp + STACK_OFFSET + 24]	/* Store	Group		*/

1:	ldub		[%o1], %o2			/* Load		Group		*/
	brz,pn		%o2, 2f				/* CTI+IEU1	Group		*/
	 srl		%o2, 3, %o3			/* IEU0				*/
	and		%o3, 0x18, %o3			/* IEU0		Group		*/

	and		%o2, 0x3f, %o2			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	sllx		%o4, %o2, %g1			/* IEU0				*/
	add		%o1, 1, %o1			/* IEU1				*/

	or		%g2, %g1, %g2			/* IEU0		Group		*/
	ba,pt		%xcc, 1b			/* CTI				*/
	 stx		%g2, [%o5 + %o3]		/* Store			*/
2:	andcc		%o0, 7, %g0			/* IEU1		Group		*/

	be,a,pt		%xcc, 4f			/* CTI				*/
	 ldx		[%o0], %o2			/* Load				*/
	ldub		[%o0], %o2			/* Load		Group		*/
3:	srl		%o2, 3, %o3			/* IEU0		Group		*/

	and		%o2, 0x3f, %o2			/* IEU1				*/
	and		%o3, 0x18, %o3			/* IEU0		Group		*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	sllx		%o4, %o2, %g1			/* IEU0				*/

	add		%o0, 1, %o0			/* IEU1				*/
	andcc		%g2, %g1, %g0			/* IEU1		Group		*/
	be,pn		%xcc, 12f			/* CTI				*/
	 andcc		%o0, 7, %g0			/* IEU1		Group		*/

	bne,a,pt	%icc, 3b			/* CTI				*/
	 ldub		[%o0], %o2			/* Load				*/
	ldx		[%o0], %o2			/* Load		Group		*/
4:	srlx		%o2, 59, %o3			/* IEU0		Group		*/

	srlx		%o2, 56, %g5			/* IEU0		Group		*/
5:	and		%o3, 0x18, %o3			/* IEU1				*/
	andcc		%g5, 0x3f, %g5			/* IEU1		Group		*/
	ldx		[%o5 + %o3], %g2		/* Load				*/

	srlx		%o2, 51, %o3			/* IEU0				*/
	sllx		%o4, %g5, %g1			/* IEU0		Group		*/
	srlx		%o2, 48, %g5			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/

	be,pn		%xcc, 13f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g5, 0x3f, %g5			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/

	srlx		%o2, 43, %o3			/* IEU0				*/
	sllx		%o4, %g5, %g1			/* IEU0		Group		*/
	srlx		%o2, 40, %g5			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/

	be,pn		%xcc, 14f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g5, 0x3f, %g5			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/

	srlx		%o2, 35, %o3			/* IEU0				*/
	sllx		%o4, %g5, %g1			/* IEU0		Group		*/
	srlx		%o2, 32, %g5			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/

	be,pn		%xcc, 15f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g5, 0x3f, %g5			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/

	srlx		%o2, 27, %o3			/* IEU0				*/
	sllx		%o4, %g5, %g1			/* IEU0		Group		*/
	srlx		%o2, 24, %g5			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/

	be,pn		%xcc, 16f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g5, 0x3f, %g5			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/

	srlx		%o2, 19, %o3			/* IEU0				*/
	sllx		%o4, %g5, %g1			/* IEU0		Group		*/
	srlx		%o2, 16, %g5			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/

	be,pn		%xcc, 17f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g5, 0x3f, %g5			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/

	srlx		%o2, 11, %o3			/* IEU0				*/
	sllx		%o4, %g5, %g1			/* IEU0		Group		*/
	add		%o0, 8, %o0			/* IEU1				*/
	srlx		%o2, 8, %g5			/* IEU0		Group		*/

	andcc		%g2, %g1, %g2			/* IEU1				*/
	be,pn		%xcc, 18f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g5, 0x3f, %g5			/* IEU1				*/

	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	sllx		%o4, %g5, %g1			/* IEU0				*/
	mov		%o2, %g5			/* IEU1				*/
	srlx		%o2, 3, %o3			/* IEU0		Group		*/

	ldxa		[%o0] ASI_PNF, %o2		/* Load				*/
	andcc		%g2, %g1, %g2			/* IEU1		Group		*/
	be,pn		%xcc, 19f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/

	and		%g5, 0x3f, %g5			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	sllx		%o4, %g5, %g1			/* IEU0				*/
	srlx		%o2, 59, %o3			/* IEU0		Group		*/

	andcc		%g2, %g1, %g2			/* IEU1		Group		*/
	bne,pt		%xcc, 5b			/* CTI				*/
	 srlx		%o2, 56, %g5			/* IEU0		Group		*/
	sub		%o0, 1, %o0			/* IEU1				*/

	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

	.align		16
19:	sub		%o0, 2, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

18:	sub		%o0, 3, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

17:	add		%o0, 4, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

16:	add		%o0, 3, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

15:	add		%o0, 2, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

14:	add		%o0, 1, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

13:	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/

	.align		16
12:	sub		%o0, 1, %o0			/* IEU0		Group		*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	retl						/* CTI+IEU1	Group		*/
	 sub		%o0, %g4, %o0			/* IEU0				*/
END(strspn)
libc_hidden_builtin_def (strspn)
