/* Optimized version of the standard strcmp() function.
   This file is part of the GNU C Library.
   Copyright (C) 2000-2014 Free Software Foundation, Inc.
   Contributed by Dan Pop <Dan.Pop@cern.ch>.

   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/>.  */

/* Return: the result of the comparison

   Inputs:
        in0:    s1
        in1:    s2

   Unlike memcmp(), this function is optimized for mismatches within the
   first few characters.  */

#include <sysdep.h>
#undef ret

#define s1		in0
#define s2		in1

#define val1		r15
#define val2		r16


ENTRY(strcmp)
	alloc	r2 = ar.pfs, 2, 0, 0, 0
.loop:
	ld1	val1 = [s1], 1
	ld1	val2 = [s2], 1
	cmp.eq	p6, p0 = r0, r0		// set p6
	;;
	cmp.ne.and p6, p0 = val1, r0
	cmp.ne.and p6, p0 = val2, r0
	cmp.eq.and p6, p0 = val1, val2
(p6)	br.cond.sptk .loop
	sub	ret0 = val1, val2
	br.ret.sptk.many b0
END(strcmp)
libc_hidden_builtin_def (strcmp)
