Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
cris
include
arch-v10
arch
bitops.h
Go to the documentation of this file.
1
/* asm/arch/bitops.h for Linux/CRISv10 */
2
3
#ifndef _CRIS_ARCH_BITOPS_H
4
#define _CRIS_ARCH_BITOPS_H
5
6
/*
7
* Helper functions for the core of the ff[sz] functions, wrapping the
8
* syntactically awkward asms. The asms compute the number of leading
9
* zeroes of a bits-in-byte and byte-in-word and word-in-dword-swapped
10
* number. They differ in that the first function also inverts all bits
11
* in the input.
12
*/
13
static
inline
unsigned
long
cris_swapnwbrlz(
unsigned
long
w
)
14
{
15
/* Let's just say we return the result in the same register as the
16
input. Saying we clobber the input but can return the result
17
in another register:
18
! __asm__ ("swapnwbr %2\n\tlz %2,%0"
19
! : "=r,r" (res), "=r,X" (dummy) : "1,0" (w));
20
confuses gcc (sched.c, gcc from cris-dist-1.14). */
21
22
unsigned
long
res
;
23
__asm__
(
"swapnwbr %0 \n\t"
24
"lz %0,%0"
25
:
"=r"
(res) :
"0"
(w));
26
return
res
;
27
}
28
29
static
inline
unsigned
long
cris_swapwbrlz(
unsigned
long
w)
30
{
31
unsigned
res
;
32
__asm__
(
"swapwbr %0 \n\t"
33
"lz %0,%0"
34
:
"=r"
(res)
35
:
"0"
(w));
36
return
res
;
37
}
38
39
/*
40
* ffz = Find First Zero in word. Undefined if no zero exists,
41
* so code should check against ~0UL first..
42
*/
43
static
inline
unsigned
long
ffz
(
unsigned
long
w)
44
{
45
return
cris_swapnwbrlz(w);
46
}
47
54
static
inline
unsigned
long
__ffs
(
unsigned
long
word
)
55
{
56
return
cris_swapnwbrlz(~word);
57
}
58
68
static
inline
unsigned
long
kernel_ffs(
unsigned
long
w)
69
{
70
return
w ? cris_swapwbrlz (w) + 1 : 0;
71
}
72
73
#endif
Generated on Thu Jan 10 2013 12:49:10 for Linux Kernel by
1.8.2