|  | #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 | 
|  |  | 
|  | /* 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) |