// 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