mdbx: refine __cold/__hot macros (backport).

В том числе для устранения проблемы
`error: inlining failed in call to ‘always_inline FOO(...)’: target specific option mismatch`
при сборке посредством GCC >10.x для SH4.
This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2023-02-13 16:24:52 +03:00
parent f532e907e9
commit 33b5aeb768

View File

@ -537,15 +537,13 @@ __extern_C key_t ftok(const char *, int);
#ifndef __hot #ifndef __hot
#if defined(__OPTIMIZE__) #if defined(__OPTIMIZE__)
#if defined(__e2k__) #if defined(__clang__) && !__has_attribute(__hot__) && \
#define __hot __attribute__((__hot__)) __optimize(3)
#elif defined(__clang__) && !__has_attribute(__hot_) && \
__has_attribute(__section__) && \ __has_attribute(__section__) && \
(defined(__linux__) || defined(__gnu_linux__)) (defined(__linux__) || defined(__gnu_linux__))
/* just put frequently used functions in separate section */ /* just put frequently used functions in separate section */
#define __hot __attribute__((__section__("text.hot"))) __optimize("O3") #define __hot __attribute__((__section__("text.hot"))) __optimize("O3")
#elif defined(__GNUC__) || __has_attribute(__hot__) #elif defined(__GNUC__) || __has_attribute(__hot__)
#define __hot __attribute__((__hot__)) __optimize("O3") #define __hot __attribute__((__hot__))
#else #else
#define __hot __optimize("O3") #define __hot __optimize("O3")
#endif #endif
@ -556,15 +554,13 @@ __extern_C key_t ftok(const char *, int);
#ifndef __cold #ifndef __cold
#if defined(__OPTIMIZE__) #if defined(__OPTIMIZE__)
#if defined(__e2k__) #if defined(__clang__) && !__has_attribute(__cold__) && \
#define __cold __attribute__((__cold__)) __optimize(1)
#elif defined(__clang__) && !__has_attribute(cold) && \
__has_attribute(__section__) && \ __has_attribute(__section__) && \
(defined(__linux__) || defined(__gnu_linux__)) (defined(__linux__) || defined(__gnu_linux__))
/* just put infrequently used functions in separate section */ /* just put infrequently used functions in separate section */
#define __cold __attribute__((__section__("text.unlikely"))) __optimize("Os") #define __cold __attribute__((__section__("text.unlikely"))) __optimize("Os")
#elif defined(__GNUC__) || __has_attribute(cold) #elif defined(__GNUC__) || __has_attribute(__cold__)
#define __cold __attribute__((__cold__)) __optimize("Os") #define __cold __attribute__((__cold__))
#else #else
#define __cold __optimize("Os") #define __cold __optimize("Os")
#endif #endif