blob: df10b871c6771f7c13a8e6c97be58d0762686179 [file] [log] [blame]
#pragma once
/* Linux calls it __ASSEMBLY__ */
#ifdef __ASSEMBLER__
#define __ASSEMBLY__ 1
#endif
/* This is a bit hokey. It turns off the #define inline to include
* always_inline, which breaks our uses of "extern inline". */
#define CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING 1
#define CONFIG_OPTIMIZE_INLINING 1
/* Make sure Linux's compiler.h is only included here. */
#define __AKAROS_COMPILER_H 1
#include <linux/compiler.h>
#undef __AKAROS_COMPILER_H
/* Linux uses this as a tag for the __CHECKER__ and either defined it to
* nothing or to some attribute. We use it for the name of the pcpu variables
* .section, so need it to not be #defined yet. */
#undef __percpu
/* If __VA_ARGS__ is empty, the ## will eat the comma to the left, so we call
* __MACRO_NARG with 1 + NR_ARGS arguments, then the 6, 5, 4, etc. __MACRO_NARG
* will strip the 0 (the _0), then the args (if any), and then return the Nth
* integer passed in, which will be the number of original args. */
#define __MACRO_NARG(_0, _1, _2, _3, _4, _5, _6, x, ...) x
#define MACRO_NR_ARGS(...) __MACRO_NARG(0, ##__VA_ARGS__, 6, 5, 4, 3, 2, 1, 0)