/* * Copyright (C) 2004-2007 Atmel Corporation * * This file is subject to the terms and conditions of the GNU Lesser General * Public License. See the file "COPYING.LIB" in the main directory of this * archive for more details. */ #include <features.h> #define s1 r12 #define s2 r11 #define len r10 .text .global strcmp .type strcmp, @function .align 1 strcmp: mov r8, 3 tst s1, r8 brne .Lunaligned_s1 tst s2, r8 brne .Lunaligned_s2 1: ld.w r8, s1++ ld.w r9, s2++ cp.w r8, r9 brne 2f tnbz r8 brne 1b retal 0 2: bfextu r12, r8, 24, 8 bfextu r11, r9, 24, 8 sub r12, r11 retne r12 cp.w r11, 0 reteq 0 bfextu r12, r8, 16, 8 bfextu r11, r9, 16, 8 sub r12, r11 retne r12 cp.w r11, 0 reteq 0 bfextu r12, r8, 8, 8 bfextu r11, r9, 8, 8 sub r12, r11 retne r12 cp.w r11, 0 reteq 0 bfextu r12, r8, 0, 8 bfextu r11, r9, 0, 8 sub r12, r11 retal r12 .Lunaligned_s1: 3: tst s1, r8 breq 4f ld.ub r10, s1++ ld.ub r9, s2++ sub r10, r9 retne r10 cp.w r9, 0 brne 3b retal r10 4: tst s2, r8 breq 1b .Lunaligned_s2: /* * s1 and s2 can't both be aligned, and unaligned word loads * can trigger spurious exceptions if we cross a page boundary. * Do it the slow way... */ 1: ld.ub r8, s1++ ld.ub r9, s2++ sub r8, r9 retne r8 cp.w r9, 0 brne 1b retal 0 .size strcmp, . - strcmp libc_hidden_def(strcmp) #ifndef __UCLIBC_HAS_LOCALE__ strong_alias(strcmp, strcoll) libc_hidden_def(strcoll) #endif