36,10 → 36,29 |
#define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) |
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0) |
|
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) |
|
/* |
* This looks more complex than it should be. But we need to |
* get the type for the ~ right in round_down (it needs to be |
* as wide as the result!), and we want to evaluate the macro |
* arguments just once each. |
*/ |
#define __round_mask(x, y) ((__typeof__(x))((y)-1)) |
#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) |
#define round_down(x, y) ((x) & ~__round_mask(x, y)) |
|
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) |
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) |
#define DIV_ROUND_UP_ULL(ll,d) \ |
({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; }) |
|
#if BITS_PER_LONG == 32 |
# define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP_ULL(ll, d) |
#else |
# define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP(ll,d) |
#endif |
|
/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */ |
#define roundup(x, y) ( \ |
{ \ |
47,17 → 66,40 |
(((x) + (__y - 1)) / __y) * __y; \ |
} \ |
) |
#define rounddown(x, y) ( \ |
{ \ |
typeof(x) __x = (x); \ |
__x - (__x % (y)); \ |
} \ |
) |
|
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) |
#define DIV_ROUND_UP_ULL(ll,d) \ |
({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; }) |
/* |
* Divide positive or negative dividend by positive divisor and round |
* to closest integer. Result is undefined for negative divisors and |
* for negative dividends if the divisor variable type is unsigned. |
*/ |
#define DIV_ROUND_CLOSEST(x, divisor)( \ |
{ \ |
typeof(divisor) __divisor = divisor; \ |
(((x) + ((__divisor) / 2)) / (__divisor)); \ |
typeof(x) __x = x; \ |
typeof(divisor) __d = divisor; \ |
(((typeof(x))-1) > 0 || \ |
((typeof(divisor))-1) > 0 || (__x) > 0) ? \ |
(((__x) + ((__d) / 2)) / (__d)) : \ |
(((__x) - ((__d) / 2)) / (__d)); \ |
} \ |
) |
|
/* |
* Multiplies an integer by a fraction, while avoiding unnecessary |
* overflow or loss of precision. |
*/ |
#define mult_frac(x, numer, denom)( \ |
{ \ |
typeof(x) quot = (x) / (denom); \ |
typeof(x) rem = (x) % (denom); \ |
(quot * (numer)) + ((rem * (numer)) / (denom)); \ |
} \ |
) |
|
#define clamp_t(type, val, min, max) ({ \ |
type __val = (val); \ |