blob: 5ed721ad5b1985818ff2c783793ae7bad0d7b7f1 [file] [log] [blame]
Greg Kroah-Hartman6f52b162017-11-01 15:08:43 +01001/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
Vivek Goyal9d291e72007-05-02 19:27:06 +02002/* const.h: Macros for dealing with constants. */
3
Masahiro Yamada2a6cc8a2018-04-10 16:36:15 -07004#ifndef _UAPI_LINUX_CONST_H
5#define _UAPI_LINUX_CONST_H
Vivek Goyal9d291e72007-05-02 19:27:06 +02006
7/* Some constant macros are used in both assembler and
8 * C code. Therefore we cannot annotate them always with
Randy Dunlap6df95fd2007-05-08 00:31:11 -07009 * 'UL' and other type specifiers unilaterally. We
Vivek Goyal9d291e72007-05-02 19:27:06 +020010 * use the following macros to deal with this.
Jeremy Fitzhardinge74ef6492008-01-30 13:32:42 +010011 *
12 * Similarly, _AT() will cast an expression with a type in C, but
13 * leave it unchanged in asm.
Vivek Goyal9d291e72007-05-02 19:27:06 +020014 */
15
16#ifdef __ASSEMBLY__
17#define _AC(X,Y) X
Jeremy Fitzhardinge74ef6492008-01-30 13:32:42 +010018#define _AT(T,X) X
Vivek Goyal9d291e72007-05-02 19:27:06 +020019#else
20#define __AC(X,Y) (X##Y)
21#define _AC(X,Y) __AC(X,Y)
Jeremy Fitzhardinge74ef6492008-01-30 13:32:42 +010022#define _AT(T,X) ((T)(X))
Vivek Goyal9d291e72007-05-02 19:27:06 +020023#endif
24
Masahiro Yamada2dd8a622018-04-10 16:36:19 -070025#define _UL(x) (_AC(x, UL))
26#define _ULL(x) (_AC(x, ULL))
27
Masahiro Yamada21e7bc62018-04-10 16:36:24 -070028#define _BITUL(x) (_UL(1) << (x))
29#define _BITULL(x) (_ULL(1) << (x))
H. Peter Anvin2fc016c2013-04-27 16:07:49 -070030
Masahiro Yamada2a6cc8a2018-04-10 16:36:15 -070031#endif /* _UAPI_LINUX_CONST_H */