/* strpbrk (s, accept) -- Find the first occurrence in S of any character in
			  ACCEPT.
   For SPARC v9.
   Copyright (C) 1999-2014 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(strpbrk)
	sub		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	mov		1, %o4				/* IEU1				*/
	stx		%o4, [%sp + STACK_OFFSET]	/* Store	Group		*/
	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		*/
	bne,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, %g4			/* IEU0		Group		*/

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

	sllx		%o4, %g4, %g1			/* IEU0		Group		*/
	srlx		%o2, 48, %g4			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/
	bne,pn		%xcc, 13f			/* CTI				*/

	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g4, 0x3f, %g4			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	srlx		%o2, 43, %o3			/* IEU0				*/

	sllx		%o4, %g4, %g1			/* IEU0		Group		*/
	srlx		%o2, 40, %g4			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/
	bne,pn		%xcc, 14f			/* CTI				*/

	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g4, 0x3f, %g4			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	srlx		%o2, 35, %o3			/* IEU0				*/

	sllx		%o4, %g4, %g1			/* IEU0		Group		*/
	srlx		%o2, 32, %g4			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/
	bne,pn		%xcc, 15f			/* CTI				*/

	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g4, 0x3f, %g4			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	srlx		%o2, 27, %o3			/* IEU0				*/

	sllx		%o4, %g4, %g1			/* IEU0		Group		*/
	srlx		%o2, 24, %g4			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/
	bne,pn		%xcc, 16f			/* CTI				*/

	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g4, 0x3f, %g4			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	srlx		%o2, 19, %o3			/* IEU0				*/

	sllx		%o4, %g4, %g1			/* IEU0		Group		*/
	srlx		%o2, 16, %g4			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/
	bne,pn		%xcc, 17f			/* CTI				*/

	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g4, 0x3f, %g4			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	srlx		%o2, 11, %o3			/* IEU0				*/

	sllx		%o4, %g4, %g1			/* IEU0		Group		*/
	add		%o0, 8, %o0			/* IEU1				*/
	srlx		%o2, 8, %g4			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1				*/

	bne,pn		%xcc, 18f			/* CTI				*/
	 and		%o3, 0x18, %o3			/* IEU0		Group		*/
	and		%g4, 0x3f, %g4			/* IEU1				*/
	ldx		[%o5 + %o3], %g2		/* Load		Group		*/

	sllx		%o4, %g4, %g1			/* IEU0				*/
	mov		%o2, %g5			/* IEU1				*/
	srlx		%o2, 3, %o3			/* IEU0		Group		*/
	ldxa		[%o0] ASI_PNF, %o2		/* Load				*/

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

	ldx		[%o5 + %o3], %g2		/* Load		Group		*/
	sllx		%o4, %g4, %g1			/* IEU0				*/
	srlx		%o2, 59, %o3			/* IEU0		Group		*/
	andcc		%g2, %g1, %g2			/* IEU1		Group		*/

	be,pt		%xcc, 5b			/* CTI				*/
	 srlx		%o2, 56, %g4			/* IEU0		Group		*/
	sub		%o0, 1, %o0			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/

	andcc		%g5, 0xff, %g0			/* IEU1				*/
	retl						/* CTI+IEU1	Group		*/
	 move		%icc, 0, %o0			/* Single	Group		*/

	.align		16
19:	sub		%o0, 2, %o0			/* IEU1				*/
	srl		%g5, 8, %g1			/* IEU0		Group		*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	andcc		%g1, 0xff, %g0			/* IEU1		Group		*/

	retl						/* CTI+IEU1	Group		*/
	 move		%icc, 0, %o0			/* Single	Group		*/
18:	sub		%o0, 3, %o0			/* IEU1				*/
	srl		%o2, 16, %g1			/* IEU0		Group		*/

	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	andcc		%g1, 0xff, %g0			/* IEU1		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 move		%icc, 0, %o0			/* Single	Group		*/

17:	add		%o0, 4, %o0			/* IEU1				*/
	srl		%o2, 24, %g1			/* IEU0		Group		*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	retl						/* CTI+IEU1	Group		*/

	 movrz		%g1, 0, %o0			/* Single	Group		*/
16:	add		%o0, 3, %o0			/* IEU1				*/
	srlx		%o2, 32, %g1			/* IEU0		Group		*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/

	andcc		%g1, 0xff, %g0			/* IEU1		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 move		%icc, 0, %o0			/* Single	Group		*/

	.align		16
15:	add		%o0, 2, %o0			/* IEU1				*/
	srlx		%o2, 40, %g1			/* IEU0		Group		*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	andcc		%g1, 0xff, %g0			/* IEU1		Group		*/

	retl						/* CTI+IEU1	Group		*/
	 move		%icc, 0, %o0			/* Single	Group		*/
14:	add		%o0, 1, %o0			/* IEU1				*/
	srlx		%o2, 48, %g1			/* IEU0		Group		*/

	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	andcc		%g1, 0xff, %g0			/* IEU1		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 move		%icc, 0, %o0			/* Single	Group		*/

13:	add		%sp, STACK_SIZE+32, %sp		/* IEU1				*/
	srlx		%o2, 56, %g1			/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/
	 movrz		%g1, 0, %o0			/* Single	Group		*/

	.align		16
12:	sub		%o0, 1, %o0			/* IEU0		Group		*/
	or		%o3, %o2, %g1			/* IEU1				*/
	add		%sp, STACK_SIZE+32, %sp		/* IEU0		Group		*/
	retl						/* CTI+IEU1	Group		*/

	 movrz		%g1, 0, %o0			/* Single	Group		*/
END(strpbrk)
libc_hidden_builtin_def (strpbrk)
