Author: stas
Date: Sun Jun 21 12:58:56 2009
New Revision: 194583
URL: http://svn.freebsd.org/changeset/base/194583

Log:
  - Fix strncmp on arm. Return 0 as result without performing the
    main cycle only if the len passed is equal to 0. If end address
    overflows use last possible address as the end address.
  
  Based on:     discussion on arm@
  MFC after:    1 month

Modified:
  head/lib/libc/arm/string/strncmp.S

Modified: head/lib/libc/arm/string/strncmp.S
==============================================================================
--- head/lib/libc/arm/string/strncmp.S  Sun Jun 21 11:21:16 2009        
(r194582)
+++ head/lib/libc/arm/string/strncmp.S  Sun Jun 21 12:58:56 2009        
(r194583)
@@ -33,13 +33,17 @@
 __FBSDID("$FreeBSD$");
 
 ENTRY(strncmp)
-/* if ((len - 1) < 0) return 0 */
-       subs    r2, r2, #1
-       movmi   r0, #0
-       movmi   pc, lr
+/* if (len == 0) return 0 */
+       cmp     r2, #0
+       moveq   r0, #0
+       moveq   pc, lr
 
 /* ip == last src address to compare */
-       add     ip, r0, r2
+       adds    ip, r0, r2
+       sub     ip, ip, #1
+/* Use last possible address on overflow. */
+       movcs   ip, #0
+       subcs   ip, ip, #1
 1:
        ldrb    r2, [r0], #1
        ldrb    r3, [r1], #1
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to