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
7a928ead
Commit
7a928ead
authored
Apr 20, 2004
by
Russell King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ARM] Add find_first_bit and find_next_bit.
parent
dfb9c436
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
65 additions
and
1 deletion
+65
-1
arch/arm/lib/findbit.S
arch/arm/lib/findbit.S
+57
-0
include/asm-arm/bitops.h
include/asm-arm/bitops.h
+8
-1
No files found.
arch/arm/lib/findbit.S
View file @
7a928ead
...
...
@@ -51,6 +51,39 @@ ENTRY(_find_next_zero_bit_le)
add
r2
,
r2
,
#
1
@
align
bit
pointer
b
2
b
@
loop
for
next
bit
/*
*
Purpose
:
Find
a
'one'
bit
*
Prototype
:
int
find_first_bit
(
const
unsigned
long
*
addr
,
unsigned
int
maxbit
)
;
*/
ENTRY
(
_find_first_bit_le
)
teq
r1
,
#
0
beq
3
f
mov
r2
,
#
0
1
:
ldrb
r3
,
[
r0
,
r2
,
lsr
#
3
]
movs
r3
,
r3
bne
.
found
@
any
now
set
-
found
zero
bit
add
r2
,
r2
,
#
8
@
next
bit
pointer
2
:
cmp
r2
,
r1
@
any
more
?
blo
1
b
3
:
mov
r0
,
r1
@
no
free
bits
RETINSTR
(
mov
,
pc
,
lr
)
/*
*
Purpose
:
Find
next
'one'
bit
*
Prototype
:
int
find_next_zero_bit
(
void
*
addr
,
unsigned
int
maxbit
,
int
offset
)
*/
ENTRY
(
_find_next_bit_le
)
teq
r1
,
#
0
beq
2
b
ands
ip
,
r2
,
#
7
beq
1
b
@
If
new
byte
,
goto
old
routine
ldrb
r3
,
[
r0
,
r2
,
lsr
#
3
]
movs
r3
,
r3
,
lsr
ip
@
shift
off
unused
bits
bne
.
found
orr
r2
,
r2
,
#
7
@
if
zero
,
then
no
bits
here
add
r2
,
r2
,
#
1
@
align
bit
pointer
b
2
b
@
loop
for
next
bit
#ifdef __ARMEB__
ENTRY
(
_find_first_zero_bit_be
)
...
...
@@ -78,6 +111,30 @@ ENTRY(_find_next_zero_bit_be)
addeq
r2
,
r2
,
#
1
@
align
bit
pointer
beq
2
b
@
loop
for
next
bit
ENTRY
(
_find_first_bit_be
)
teq
r1
,
#
0
beq
3
f
mov
r2
,
#
0
1
:
eor
r3
,
r2
,
#
0x18
@
big
endian
byte
ordering
ldrb
r3
,
[
r0
,
r3
,
lsr
#
3
]
movs
r3
,
r3
bne
.
found
@
any
now
set
-
found
zero
bit
add
r2
,
r2
,
#
8
@
next
bit
pointer
2
:
cmp
r2
,
r1
@
any
more
?
blo
1
b
3
:
mov
r0
,
r1
@
no
free
bits
RETINSTR
(
mov
,
pc
,
lr
)
ENTRY
(
_find_next_bit_be
)
ands
ip
,
r2
,
#
7
beq
1
b
@
If
new
byte
,
goto
old
routine
eor
r3
,
r2
,
#
0x18
@
big
endian
byte
ordering
ldrb
r3
,
[
r0
,
r3
,
lsr
#
3
]
movs
r3
,
r3
,
lsr
ip
@
shift
off
unused
bits
orreq
r2
,
r2
,
#
7
@
if
zero
,
then
no
bits
here
addeq
r2
,
r2
,
#
1
@
align
bit
pointer
beq
2
b
@
loop
for
next
bit
#endif
/*
...
...
include/asm-arm/bitops.h
View file @
7a928ead
...
...
@@ -212,6 +212,8 @@ extern int _test_and_clear_bit_le(int nr, volatile unsigned long * p);
extern
int
_test_and_change_bit_le
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_find_first_zero_bit_le
(
void
*
p
,
unsigned
size
);
extern
int
_find_next_zero_bit_le
(
void
*
p
,
int
size
,
int
offset
);
extern
int
_find_first_bit_le
(
const
unsigned
long
*
p
,
unsigned
size
);
extern
int
_find_next_bit_le
(
const
unsigned
long
*
p
,
int
size
,
int
offset
);
/*
* Big endian assembly bitops. nr = 0 -> byte 3 bit 0.
...
...
@@ -224,7 +226,8 @@ extern int _test_and_clear_bit_be(int nr, volatile unsigned long * p);
extern
int
_test_and_change_bit_be
(
int
nr
,
volatile
unsigned
long
*
p
);
extern
int
_find_first_zero_bit_be
(
void
*
p
,
unsigned
size
);
extern
int
_find_next_zero_bit_be
(
void
*
p
,
int
size
,
int
offset
);
extern
int
_find_first_bit_be
(
const
unsigned
long
*
p
,
unsigned
size
);
extern
int
_find_next_bit_be
(
unsigned
long
*
p
,
int
size
,
int
offset
);
/*
* The __* form of bitops are non-atomic and may be reordered.
...
...
@@ -255,6 +258,8 @@ extern int _find_next_zero_bit_be(void * p, int size, int offset);
#define test_bit(nr,p) __test_bit(nr,p)
#define find_first_zero_bit(p,sz) _find_first_zero_bit_le(p,sz)
#define find_next_zero_bit(p,sz,off) _find_next_zero_bit_le(p,sz,off)
#define find_first_bit(p,sz) _find_first_bit_le(p,sz)
#define find_next_bit(p,sz,off) _find_next_bit_le(p,sz,off)
#define WORD_BITOFF_TO_LE(x) ((x))
...
...
@@ -272,6 +277,8 @@ extern int _find_next_zero_bit_be(void * p, int size, int offset);
#define test_bit(nr,p) __test_bit(nr,p)
#define find_first_zero_bit(p,sz) _find_first_zero_bit_be(p,sz)
#define find_next_zero_bit(p,sz,off) _find_next_zero_bit_be(p,sz,off)
#define find_first_bit(p,sz) _find_first_bit_be(p,sz)
#define find_next_bit(p,sz,off) _find_next_bit_be(p,sz,off)
#define WORD_BITOFF_TO_LE(x) ((x) ^ 0x18)
...
...
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