1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef __MATH_SUPPORT_H
17#define __MATH_SUPPORT_H
18
19#include <linux/kernel.h>
20
21#define IS_ODD(a) ((a) & 0x1)
22#define IS_EVEN(a) (!IS_ODD(a))
23
24
25#define EVEN_FLOOR(x) ((x) & ~1)
26
27
28
29#define EVEN_CEIL(x) ((IS_ODD(x)) ? ((x) + 1) : (x))
30
31
32#define IMPLIES(a, b) (!(a) || (b))
33
34
35
36#define MAX(a, b) (((a) > (b)) ? (a) : (b))
37#define MIN(a, b) (((a) < (b)) ? (a) : (b))
38
39#define ROUND_DIV(a, b) (((b) != 0) ? ((a) + ((b) >> 1)) / (b) : 0)
40#define CEIL_DIV(a, b) (((b) != 0) ? ((a) + (b) - 1) / (b) : 0)
41#define CEIL_MUL(a, b) (CEIL_DIV(a, b) * (b))
42#define CEIL_MUL2(a, b) (((a) + (b) - 1) & ~((b) - 1))
43#define CEIL_SHIFT(a, b) (((a) + (1 << (b)) - 1) >> (b))
44#define CEIL_SHIFT_MUL(a, b) (CEIL_SHIFT(a, b) << (b))
45#define ROUND_HALF_DOWN_DIV(a, b) (((b) != 0) ? ((a) + (b / 2) - 1) / (b) : 0)
46#define ROUND_HALF_DOWN_MUL(a, b) (ROUND_HALF_DOWN_DIV(a, b) * (b))
47
48
49#define bit2(x) ((x) | ((x) >> 1))
50#define bit4(x) (bit2(x) | (bit2(x) >> 2))
51#define bit8(x) (bit4(x) | (bit4(x) >> 4))
52#define bit16(x) (bit8(x) | (bit8(x) >> 8))
53#define bit32(x) (bit16(x) | (bit16(x) >> 16))
54#define NEXT_POWER_OF_2(x) (bit32(x - 1) + 1)
55
56
57
58
59
60
61
62#if !defined(PIPE_GENERATION)
63
64
65
66
67
68
69
70
71
72
73
74#define ceil_div(a, b) (CEIL_DIV(a, b))
75
76static inline unsigned int ceil_mul(unsigned int a, unsigned int b)
77{
78 return CEIL_MUL(a, b);
79}
80
81static inline unsigned int ceil_mul2(unsigned int a, unsigned int b)
82{
83 return CEIL_MUL2(a, b);
84}
85
86static inline unsigned int ceil_shift(unsigned int a, unsigned int b)
87{
88 return CEIL_SHIFT(a, b);
89}
90
91static inline unsigned int ceil_shift_mul(unsigned int a, unsigned int b)
92{
93 return CEIL_SHIFT_MUL(a, b);
94}
95
96
97static inline unsigned int round_half_down_div(unsigned int a, unsigned int b)
98{
99 return ROUND_HALF_DOWN_DIV(a, b);
100}
101
102
103static inline unsigned int round_half_down_mul(unsigned int a, unsigned int b)
104{
105 return ROUND_HALF_DOWN_MUL(a, b);
106}
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126static inline unsigned int ceil_pow2(unsigned int a)
127{
128 if (a == 0) {
129 return 1;
130 }
131
132 else if ((!((a) & ((a) - 1)))) {
133 return a;
134 } else {
135 unsigned int v = a;
136
137 v |= v >> 1;
138 v |= v >> 2;
139 v |= v >> 4;
140 v |= v >> 8;
141 v |= v >> 16;
142 return (v + 1);
143 }
144}
145
146#endif
147
148
149
150
151
152#define OP_std_modadd(base, offset, size) ((base + offset) % (size))
153
154#endif
155