xref: /OK3568_Linux_fs/kernel/include/acpi/platform/acgcc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2*4882a593Smuzhiyun /******************************************************************************
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Name: acgcc.h - GCC specific defines, etc.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 2000 - 2020, Intel Corp.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *****************************************************************************/
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __ACGCC_H__
11*4882a593Smuzhiyun #define __ACGCC_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /*
14*4882a593Smuzhiyun  * Use compiler specific <stdarg.h> is a good practice for even when
15*4882a593Smuzhiyun  * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun #ifndef va_arg
18*4882a593Smuzhiyun #ifdef ACPI_USE_BUILTIN_STDARG
19*4882a593Smuzhiyun typedef __builtin_va_list va_list;
20*4882a593Smuzhiyun #define va_start(v, l)          __builtin_va_start(v, l)
21*4882a593Smuzhiyun #define va_end(v)               __builtin_va_end(v)
22*4882a593Smuzhiyun #define va_arg(v, l)            __builtin_va_arg(v, l)
23*4882a593Smuzhiyun #define va_copy(d, s)           __builtin_va_copy(d, s)
24*4882a593Smuzhiyun #else
25*4882a593Smuzhiyun #include <stdarg.h>
26*4882a593Smuzhiyun #endif
27*4882a593Smuzhiyun #endif
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define ACPI_INLINE             __inline__
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /* Function name is used for debug output. Non-ANSI, compiler-dependent */
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define ACPI_GET_FUNCTION_NAME          __func__
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /*
36*4882a593Smuzhiyun  * This macro is used to tag functions as "printf-like" because
37*4882a593Smuzhiyun  * some compilers (like GCC) can catch printf format string problems.
38*4882a593Smuzhiyun  */
39*4882a593Smuzhiyun #define ACPI_PRINTF_LIKE(c) __attribute__ ((__format__ (__printf__, c, c+1)))
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /*
42*4882a593Smuzhiyun  * Some compilers complain about unused variables. Sometimes we don't want to
43*4882a593Smuzhiyun  * use all the variables (for example, _acpi_module_name). This allows us
44*4882a593Smuzhiyun  * to tell the compiler warning in a per-variable manner that a variable
45*4882a593Smuzhiyun  * is unused.
46*4882a593Smuzhiyun  */
47*4882a593Smuzhiyun #define ACPI_UNUSED_VAR __attribute__ ((unused))
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun /* GCC supports __VA_ARGS__ in macros */
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #define COMPILER_VA_MACRO               1
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /* GCC supports native multiply/shift on 32-bit platforms */
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #define ACPI_USE_NATIVE_MATH64
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #endif				/* __ACGCC_H__ */
58