|
34 | 34 | //--------------------------------------------------------------------+ |
35 | 35 | // Macros Helper |
36 | 36 | //--------------------------------------------------------------------+ |
37 | | -#define TU_ARRAY_SIZE(_arr) ( sizeof(_arr) / sizeof(_arr[0]) ) |
| 37 | +#define TU_ARRAY_SIZE(_arr) ( sizeof(_arr) / sizeof(_arr[0]) ) |
38 | 38 | #define TU_FIELD_SIZE(_type, _field) (sizeof(((_type *)0)->_field)) |
39 | | -#define TU_MIN(_x, _y) ( ( (_x) < (_y) ) ? (_x) : (_y) ) |
40 | | -#define TU_MAX(_x, _y) ( ( (_x) > (_y) ) ? (_x) : (_y) ) |
41 | | -#define TU_DIV_CEIL(n, d) (((n) + (d) - 1) / (d)) |
| 39 | +#define TU_MIN(_x, _y) ( ( (_x) < (_y) ) ? (_x) : (_y) ) |
| 40 | +#define TU_MAX(_x, _y) ( ( (_x) > (_y) ) ? (_x) : (_y) ) |
| 41 | +#define TU_DIV_CEIL(n, d) (((n) + (d) - 1) / (d)) |
| 42 | +#define TU_DIV_ROUND_NEAREST(v, d) (((v) + (d)/2) / (d) ) // round to nearest integer |
42 | 43 |
|
43 | | -#define TU_U16(_high, _low) ((uint16_t) (((_high) << 8) | (_low))) |
44 | | -#define TU_U16_HIGH(_u16) ((uint8_t) (((_u16) >> 8) & 0x00ff)) |
45 | | -#define TU_U16_LOW(_u16) ((uint8_t) ((_u16) & 0x00ff)) |
46 | | -#define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) |
47 | | -#define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) |
| 44 | +#define TU_U16(_high, _low) ((uint16_t) (((_high) << 8) | (_low))) |
| 45 | +#define TU_U16_HIGH(_u16) ((uint8_t) (((_u16) >> 8) & 0x00ff)) |
| 46 | +#define TU_U16_LOW(_u16) ((uint8_t) ((_u16) & 0x00ff)) |
| 47 | +#define U16_TO_U8S_BE(_u16) TU_U16_HIGH(_u16), TU_U16_LOW(_u16) |
| 48 | +#define U16_TO_U8S_LE(_u16) TU_U16_LOW(_u16), TU_U16_HIGH(_u16) |
48 | 49 |
|
49 | | -#define TU_U32_BYTE3(_u32) ((uint8_t) ((((uint32_t) _u32) >> 24) & 0x000000ff)) // MSB |
50 | | -#define TU_U32_BYTE2(_u32) ((uint8_t) ((((uint32_t) _u32) >> 16) & 0x000000ff)) |
51 | | -#define TU_U32_BYTE1(_u32) ((uint8_t) ((((uint32_t) _u32) >> 8) & 0x000000ff)) |
52 | | -#define TU_U32_BYTE0(_u32) ((uint8_t) (((uint32_t) _u32) & 0x000000ff)) // LSB |
| 50 | +#define TU_U32_BYTE3(_u32) ((uint8_t) ((((uint32_t) _u32) >> 24) & 0x000000ff)) // MSB |
| 51 | +#define TU_U32_BYTE2(_u32) ((uint8_t) ((((uint32_t) _u32) >> 16) & 0x000000ff)) |
| 52 | +#define TU_U32_BYTE1(_u32) ((uint8_t) ((((uint32_t) _u32) >> 8) & 0x000000ff)) |
| 53 | +#define TU_U32_BYTE0(_u32) ((uint8_t) (((uint32_t) _u32) & 0x000000ff)) // LSB |
53 | 54 |
|
54 | | -#define U32_TO_U8S_BE(_u32) TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) |
55 | | -#define U32_TO_U8S_LE(_u32) TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) |
| 55 | +#define U32_TO_U8S_BE(_u32) TU_U32_BYTE3(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE0(_u32) |
| 56 | +#define U32_TO_U8S_LE(_u32) TU_U32_BYTE0(_u32), TU_U32_BYTE1(_u32), TU_U32_BYTE2(_u32), TU_U32_BYTE3(_u32) |
56 | 57 |
|
57 | | -#define TU_BIT(n) (1UL << (n)) |
| 58 | +#define TU_BIT(n) (1UL << (n)) |
58 | 59 |
|
59 | 60 | // Generate a mask with bit from high (31) to low (0) set, e.g TU_GENMASK(3, 0) = 0b1111 |
60 | | -#define TU_GENMASK(h, l) ( (UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h))) ) |
| 61 | +#define TU_GENMASK(h, l) ( (UINT32_MAX << (l)) & (UINT32_MAX >> (31 - (h))) ) |
61 | 62 |
|
62 | 63 | //--------------------------------------------------------------------+ |
63 | 64 | // Includes |
@@ -215,6 +216,8 @@ TU_ATTR_ALWAYS_INLINE static inline bool tu_is_aligned64(uint64_t value) { retur |
215 | 216 |
|
216 | 217 | //------------- Mathematics -------------// |
217 | 218 | TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_ceil(uint32_t v, uint32_t d) { return TU_DIV_CEIL(v, d); } |
| 219 | +TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_div_round_nearest(uint32_t v, uint32_t d) { return TU_DIV_ROUND_NEAREST(v, d); } |
| 220 | + |
218 | 221 | TU_ATTR_ALWAYS_INLINE static inline uint32_t tu_round_up(uint32_t v, uint32_t f) { return tu_div_ceil(v, f) * f; } |
219 | 222 |
|
220 | 223 | // log2 of a value is its MSB's position |
|
0 commit comments