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
sh
include
asm
word-at-a-time.h
Go to the documentation of this file.
1
#ifndef __ASM_SH_WORD_AT_A_TIME_H
2
#define __ASM_SH_WORD_AT_A_TIME_H
3
4
#ifdef CONFIG_CPU_BIG_ENDIAN
5
# include <
asm-generic/word-at-a-time.h
>
6
#else
7
/*
8
* Little-endian version cribbed from x86.
9
*/
10
struct
word_at_a_time
{
11
const
unsigned
long
one_bits
,
high_bits
;
12
};
13
14
#define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0x01), REPEAT_BYTE(0x80) }
15
16
/* Carl Chatfield / Jan Achrenius G+ version for 32-bit */
17
static
inline
long
count_masked_bytes(
long
mask
)
18
{
19
/* (000000 0000ff 00ffff ffffff) -> ( 1 1 2 3 ) */
20
long
a
= (0x0ff0001+
mask
) >> 23;
21
/* Fix the 1 for 00 case */
22
return
a &
mask
;
23
}
24
25
/* Return nonzero if it has a zero */
26
static
inline
unsigned
long
has_zero(
unsigned
long
a
,
unsigned
long
*
bits
,
const
struct
word_at_a_time
*
c
)
27
{
28
unsigned
long
mask
= ((a - c->
one_bits
) & ~a) & c->
high_bits
;
29
*bits =
mask
;
30
return
mask
;
31
}
32
33
static
inline
unsigned
long
prep_zero_mask
(
unsigned
long
a
,
unsigned
long
bits
,
const
struct
word_at_a_time
*
c
)
34
{
35
return
bits
;
36
}
37
38
static
inline
unsigned
long
create_zero_mask
(
unsigned
long
bits
)
39
{
40
bits = (bits - 1) & ~bits;
41
return
bits >> 7;
42
}
43
44
/* The mask we created is directly usable as a bytemask */
45
#define zero_bytemask(mask) (mask)
46
47
static
inline
unsigned
long
find_zero(
unsigned
long
mask
)
48
{
49
return
count_masked_bytes(mask);
50
}
51
#endif
52
53
#endif
Generated on Thu Jan 10 2013 12:50:52 for Linux Kernel by
1.8.2