| /* | |
| * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230) | |
| * | |
| * SPDX-License-Identifier: BSD-2-Clause | |
| */ | |
| #pragma once | |
| #include <utils/attribute.h> | |
| #include <utils/builtin.h> | |
| #include <utils/stringify.h> | |
| /* This idiom is a way of passing extra information or hints to GCC. It is only | |
| * occasionally successful, so don't think of it as a silver optimisation | |
| * bullet. | |
| */ | |
| #define ASSUME(x) \ | |
| do { \ | |
| if (!(x)) { \ | |
| __builtin_unreachable(); \ | |
| } \ | |
| } while (0) | |
| /* Indicate to the compiler that wherever this macro appears is a cold | |
| * execution path. That is, it is not performance critical and likely rarely | |
| * used. A perfect example is error handling code. This gives the compiler a | |
| * light hint to deprioritise optimisation of this path. | |
| */ | |
| #define COLD_PATH() \ | |
| do { \ | |
| JOIN(cold_path_, __COUNTER__): COLD UNUSED; \ | |
| } while (0) | |
| /* The opposite of `COLD_PATH`. That is, aggressively optimise this path, | |
| * potentially at the expense of others. | |
| */ | |
| #define HOT_PATH() \ | |
| do { \ | |
| JOIN(hot_path_, __COUNTER__): HOT UNUSED; \ | |
| } while (0) |