1f3bd1e05SAndrew Jones /* const.h: Macros for dealing with constants. */ 2f3bd1e05SAndrew Jones 3f3bd1e05SAndrew Jones #ifndef _LINUX_CONST_H 4f3bd1e05SAndrew Jones #define _LINUX_CONST_H 5f3bd1e05SAndrew Jones 6f3bd1e05SAndrew Jones /* Some constant macros are used in both assembler and 7f3bd1e05SAndrew Jones * C code. Therefore we cannot annotate them always with 8f3bd1e05SAndrew Jones * 'UL' and other type specifiers unilaterally. We 9f3bd1e05SAndrew Jones * use the following macros to deal with this. 10f3bd1e05SAndrew Jones * 11f3bd1e05SAndrew Jones * Similarly, _AT() will cast an expression with a type in C, but 12f3bd1e05SAndrew Jones * leave it unchanged in asm. 13f3bd1e05SAndrew Jones */ 14f3bd1e05SAndrew Jones 15*0cc3a351SSean Christopherson #ifdef __ASSEMBLER__ 16f3bd1e05SAndrew Jones #define _AC(X,Y) X 17f3bd1e05SAndrew Jones #define _AT(T,X) X 1822f287f4SAndrew Jones #define __ASM_STR(X) X 19f3bd1e05SAndrew Jones #else 20f3bd1e05SAndrew Jones #define __AC(X,Y) (X##Y) 21f3bd1e05SAndrew Jones #define _AC(X,Y) __AC(X,Y) 22f3bd1e05SAndrew Jones #define _AT(T,X) ((T)(X)) 2322f287f4SAndrew Jones #define __ASM_STR(X) #X 24f3bd1e05SAndrew Jones #endif 25f3bd1e05SAndrew Jones 26f3bd1e05SAndrew Jones #define _BITUL(x) (_AC(1,UL) << (x)) 27f3bd1e05SAndrew Jones #define _BITULL(x) (_AC(1,ULL) << (x)) 28f3bd1e05SAndrew Jones 29f3bd1e05SAndrew Jones #endif /* !(_LINUX_CONST_H) */ 30