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
include
linux
reciprocal_div.h
Go to the documentation of this file.
1
#ifndef _LINUX_RECIPROCAL_DIV_H
2
#define _LINUX_RECIPROCAL_DIV_H
3
4
#include <linux/types.h>
5
6
/*
7
* This file describes reciprocical division.
8
*
9
* This optimizes the (A/B) problem, when A and B are two u32
10
* and B is a known value (but not known at compile time)
11
*
12
* The math principle used is :
13
* Let RECIPROCAL_VALUE(B) be (((1LL << 32) + (B - 1))/ B)
14
* Then A / B = (u32)(((u64)(A) * (R)) >> 32)
15
*
16
* This replaces a divide by a multiply (and a shift), and
17
* is generally less expensive in CPU cycles.
18
*/
19
20
/*
21
* Computes the reciprocal value (R) for the value B of the divisor.
22
* Should not be called before each reciprocal_divide(),
23
* or else the performance is slower than a normal divide.
24
*/
25
extern
u32
reciprocal_value
(
u32
B
);
26
27
28
static
inline
u32
reciprocal_divide(
u32
A
,
u32
R
)
29
{
30
return
(
u32
)(((
u64
)A * R) >> 32);
31
}
32
#endif
Generated on Thu Jan 10 2013 14:52:27 for Linux Kernel by
1.8.2