svn commit: r194583 - head/lib/libc/arm/string

Stanislav Sedov stas at FreeBSD.org
Sun Jun 21 12:58:57 UTC 2009


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


More information about the svn-src-all mailing list