Module Name:    src
Committed By:   matt
Date:           Mon Aug 19 02:55:19 UTC 2013

Modified Files:
        src/common/lib/libc/arch/arm/string: ffs.S

Log Message:
Add END() and clarify thumb/arm


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/arm/string/ffs.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/arm/string/ffs.S
diff -u src/common/lib/libc/arch/arm/string/ffs.S:1.3 src/common/lib/libc/arch/arm/string/ffs.S:1.4
--- src/common/lib/libc/arch/arm/string/ffs.S:1.3	Sun Aug 11 05:02:35 2013
+++ src/common/lib/libc/arch/arm/string/ffs.S	Mon Aug 19 02:55:19 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs.S,v 1.3 2013/08/11 05:02:35 matt Exp $	*/
+/*	$NetBSD: ffs.S,v 1.4 2013/08/19 02:55:19 matt Exp $	*/
 /*
  * Copyright (c) 2001 Christopher Gilbert
  * All rights reserved.
@@ -30,7 +30,7 @@
 
 #include <machine/asm.h>
 
-RCSID("$NetBSD: ffs.S,v 1.3 2013/08/11 05:02:35 matt Exp $")
+RCSID("$NetBSD: ffs.S,v 1.4 2013/08/19 02:55:19 matt Exp $")
 
 /*
  * ffs - find first set bit, this algorithm isolates the first set
@@ -45,17 +45,23 @@ RCSID("$NetBSD: ffs.S,v 1.3 2013/08/11 0
  * 16 Feb 1994.
  */
 WEAK_ALIAS(__ffssi2,ffs)
+#if (defined(_ARM_ARCH_5) && !defined(__thumb__)) || defined(_ARM_ARCH_T2)
+#if defined(_ARM_ARCH_T2)
 ENTRY(ffs)
-#ifdef _ARM_ARCH_5
+#else
+ARM_ENTRY(ffs)
+#endif
 	/* (X & -X) gives LSB or zero.  */
- 	rsb	r1, r0, #0
+ 	neg	r1, r0
  	and	r0, r0, r1
 	clz	r0, r0
 	rsb	r0, r0, #32
 	RET
+END(ffs)
 #else
+ARM_ENTRY(ffs)
 	/* Standard trick to isolate bottom bit in r0 or 0 if r0 = 0 on entry */
- 	rsb     r1, r0, #0
+ 	neg     r1, r0
  	ands    r0, r0, r1
 	/*
 	 * now r0 has at most one set bit, call this X
@@ -82,4 +88,5 @@ ENTRY(ffs)
 	.byte	10,  0,  0, 25,  0,  0, 21, 27  /* 40-47 */
 	.byte	31,  0,  0,  0,  0, 24,  0, 20  /* 48-55 */
 	.byte   30,  0, 23, 19, 29, 18, 17,  0  /* 56-63 */
+END(ffs)
 #endif

Reply via email to