Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
9c6250fb
Commit
9c6250fb
authored
May 13, 2003
by
Nicolas Pitre
Committed by
Russell King
May 13, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ARM PATCH] 1531/1: optimized ffs/ffz/fls for ARMv5
Patch from Nicolas Pitre
parent
2febe49d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
0 deletions
+19
-0
include/asm-arm/bitops.h
include/asm-arm/bitops.h
+19
-0
No files found.
include/asm-arm/bitops.h
View file @
9c6250fb
...
@@ -277,6 +277,8 @@ extern int _find_next_zero_bit_be(void * p, int size, int offset);
...
@@ -277,6 +277,8 @@ extern int _find_next_zero_bit_be(void * p, int size, int offset);
#endif
#endif
#if __LINUX_ARM_ARCH__ < 5
/*
/*
* ffz = Find First Zero in word. Undefined if no zero exists,
* ffz = Find First Zero in word. Undefined if no zero exists,
* so code should check against ~0UL first..
* so code should check against ~0UL first..
...
@@ -326,6 +328,23 @@ static inline unsigned long __ffs(unsigned long word)
...
@@ -326,6 +328,23 @@ static inline unsigned long __ffs(unsigned long word)
#define ffs(x) generic_ffs(x)
#define ffs(x) generic_ffs(x)
#else
/*
* On ARMv5 and above those functions can be implemented around
* the clz instruction for much better code efficiency.
*/
extern
__inline__
int
generic_fls
(
int
x
);
#define fls(x) \
( __builtin_constant_p(x) ? generic_fls(x) : \
({ int __r; asm("clz%?\t%0, %1" : "=r"(__r) : "r"(x)); 32-__r; }) )
#define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })
#define __ffs(x) (ffs(x) - 1)
#define ffz(x) __ffs( ~(x) )
#endif
/*
/*
* Find first bit set in a 168-bit bitmap, where the first
* Find first bit set in a 168-bit bitmap, where the first
* 128 bits are unlikely to be set.
* 128 bits are unlikely to be set.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment