mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
gallium: include util/macros.h
The most common macros are defined there, no use to duplicate these Clean up the already redefinded macros Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
9913ce14e7
commit
984f306937
1 changed files with 2 additions and 55 deletions
|
|
@ -33,6 +33,8 @@
|
|||
|
||||
#include "p_config.h"
|
||||
|
||||
#include "util/macros.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
|
|
@ -204,61 +206,6 @@ void _ReadWriteBarrier(void);
|
|||
|
||||
#endif
|
||||
|
||||
|
||||
/* You should use these macros to mark if blocks where the if condition
|
||||
* is either likely to be true, or unlikely to be true.
|
||||
*
|
||||
* This will inform human readers of this fact, and will also inform
|
||||
* the compiler, who will in turn inform the CPU.
|
||||
*
|
||||
* CPUs often start executing code inside the if or the else blocks
|
||||
* without knowing whether the condition is true or not, and will have
|
||||
* to throw the work away if they find out later they executed the
|
||||
* wrong part of the if.
|
||||
*
|
||||
* If these macros are used, the CPU is more likely to correctly predict
|
||||
* the right path, and will avoid speculatively executing the wrong branch,
|
||||
* thus not throwing away work, resulting in better performance.
|
||||
*
|
||||
* In light of this, it is also a good idea to mark as "likely" a path
|
||||
* which is not necessarily always more likely, but that will benefit much
|
||||
* more from performance improvements since it is already much faster than
|
||||
* the other path, or viceversa with "unlikely".
|
||||
*
|
||||
* Example usage:
|
||||
* if(unlikely(do_we_need_a_software_fallback()))
|
||||
* do_software_fallback();
|
||||
* else
|
||||
* render_with_gpu();
|
||||
*
|
||||
* The macros follow the Linux kernel convention, and more examples can
|
||||
* be found there.
|
||||
*
|
||||
* Note that profile guided optimization can offer better results, but
|
||||
* needs an appropriate coverage suite and does not inform human readers.
|
||||
*/
|
||||
#ifndef likely
|
||||
# if defined(__GNUC__)
|
||||
# define likely(x) __builtin_expect(!!(x), 1)
|
||||
# define unlikely(x) __builtin_expect(!!(x), 0)
|
||||
# else
|
||||
# define likely(x) (x)
|
||||
# define unlikely(x) (x)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* Static (compile-time) assertion.
|
||||
* Basically, use COND to dimension an array. If COND is false/zero the
|
||||
* array size will be -1 and we'll get a compilation error.
|
||||
*/
|
||||
#define STATIC_ASSERT(COND) \
|
||||
do { \
|
||||
(void) sizeof(char [1 - 2*!(COND)]); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue