davidcunado-arm
8 years ago
committed by
GitHub
16 changed files with 113 additions and 74 deletions
@ -0,0 +1,97 @@ |
|||
/*
|
|||
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. |
|||
* |
|||
* Redistribution and use in source and binary forms, with or without |
|||
* modification, are permitted provided that the following conditions are met: |
|||
* |
|||
* Redistributions of source code must retain the above copyright notice, this |
|||
* list of conditions and the following disclaimer. |
|||
* |
|||
* Redistributions in binary form must reproduce the above copyright notice, |
|||
* this list of conditions and the following disclaimer in the documentation |
|||
* and/or other materials provided with the distribution. |
|||
* |
|||
* Neither the name of ARM nor the names of its contributors may be used |
|||
* to endorse or promote products derived from this software without specific |
|||
* prior written permission. |
|||
* |
|||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|||
* POSSIBILITY OF SUCH DAMAGE. |
|||
*/ |
|||
|
|||
#ifndef __UTILS_DEF_H__ |
|||
#define __UTILS_DEF_H__ |
|||
|
|||
/* Compute the number of elements in the given array */ |
|||
#define ARRAY_SIZE(a) \ |
|||
(sizeof(a) / sizeof((a)[0])) |
|||
|
|||
#define IS_POWER_OF_TWO(x) \ |
|||
(((x) & ((x) - 1)) == 0) |
|||
|
|||
#define SIZE_FROM_LOG2_WORDS(n) (4 << (n)) |
|||
|
|||
#define BIT(nr) (1UL << (nr)) |
|||
|
|||
#define MIN(x, y) __extension__ ({ \ |
|||
__typeof__(x) _x = (x); \ |
|||
__typeof__(y) _y = (y); \ |
|||
(void)(&_x == &_y); \ |
|||
_x < _y ? _x : _y; \ |
|||
}) |
|||
|
|||
#define MAX(x, y) __extension__ ({ \ |
|||
__typeof__(x) _x = (x); \ |
|||
__typeof__(y) _y = (y); \ |
|||
(void)(&_x == &_y); \ |
|||
_x > _y ? _x : _y; \ |
|||
}) |
|||
|
|||
/*
|
|||
* The round_up() macro rounds up a value to the given boundary in a |
|||
* type-agnostic yet type-safe manner. The boundary must be a power of two. |
|||
* In other words, it computes the smallest multiple of boundary which is |
|||
* greater than or equal to value. |
|||
* |
|||
* round_down() is similar but rounds the value down instead. |
|||
*/ |
|||
#define round_boundary(value, boundary) \ |
|||
((__typeof__(value))((boundary) - 1)) |
|||
|
|||
#define round_up(value, boundary) \ |
|||
((((value) - 1) | round_boundary(value, boundary)) + 1) |
|||
|
|||
#define round_down(value, boundary) \ |
|||
((value) & ~round_boundary(value, boundary)) |
|||
|
|||
/*
|
|||
* Evaluates to 1 if (ptr + inc) overflows, 0 otherwise. |
|||
* Both arguments must be unsigned pointer values (i.e. uintptr_t). |
|||
*/ |
|||
#define check_uptr_overflow(ptr, inc) \ |
|||
(((ptr) > UINTPTR_MAX - (inc)) ? 1 : 0) |
|||
|
|||
/*
|
|||
* For those constants to be shared between C and other sources, apply a 'ull' |
|||
* suffix to the argument only in C, to avoid undefined or unintended behaviour. |
|||
* |
|||
* The GNU assembler and linker do not support the 'ull' suffix (it causes the |
|||
* build process to fail) therefore the suffix is omitted when used in linker |
|||
* scripts and assembler files. |
|||
*/ |
|||
#if defined(__LINKER__) || defined(__ASSEMBLY__) |
|||
# define ULL(_x) (_x) |
|||
#else |
|||
# define ULL(_x) (_x##ull) |
|||
#endif |
|||
|
|||
#endif /* __UTILS_DEF_H__ */ |
Loading…
Reference in new issue