29 lines
884 B
C
29 lines
884 B
C
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
// Attributes that affect data layout.
|
|
#define __section(x) gnu::section(x)
|
|
#define __aligned(x) gnu::aligned(x)
|
|
#define __packed gnu::packed
|
|
#define __naked gnu::naked
|
|
|
|
// These hints may improve code generation.
|
|
#define __cold gnu::cold
|
|
#define __hot gnu::hot
|
|
#define __used gnu::used
|
|
#define __unused gnu::unused
|
|
#define __format(like, ...) gnu::format(like, __VA_ARGS__)
|
|
#define __likely(x) __builtin_expect(!!(x), 1)
|
|
#define __unlikely(x) __builtin_expect(!!(x), 0)
|
|
|
|
// Only clang has these hints, GCC will throw a warning here.
|
|
// They also don't support the C23 attribute format.
|
|
#ifdef __clang__
|
|
#define __user __attribute__((noderef, address_space(1)))
|
|
#define __phys __attribute__((noderef, address_space(2)))
|
|
#else
|
|
#define __user
|
|
#define __phys
|
|
#endif
|