xref: /aosp_15_r20/external/virglrenderer/src/mesa/pipe/p_compiler.h (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker  *
3*bbecb9d1SAndroid Build Coastguard Worker  * Copyright 2007-2008 VMware, Inc.
4*bbecb9d1SAndroid Build Coastguard Worker  * All Rights Reserved.
5*bbecb9d1SAndroid Build Coastguard Worker  *
6*bbecb9d1SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
7*bbecb9d1SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the
8*bbecb9d1SAndroid Build Coastguard Worker  * "Software"), to deal in the Software without restriction, including
9*bbecb9d1SAndroid Build Coastguard Worker  * without limitation the rights to use, copy, modify, merge, publish,
10*bbecb9d1SAndroid Build Coastguard Worker  * distribute, sub license, and/or sell copies of the Software, and to
11*bbecb9d1SAndroid Build Coastguard Worker  * permit persons to whom the Software is furnished to do so, subject to
12*bbecb9d1SAndroid Build Coastguard Worker  * the following conditions:
13*bbecb9d1SAndroid Build Coastguard Worker  *
14*bbecb9d1SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the
15*bbecb9d1SAndroid Build Coastguard Worker  * next paragraph) shall be included in all copies or substantial portions
16*bbecb9d1SAndroid Build Coastguard Worker  * of the Software.
17*bbecb9d1SAndroid Build Coastguard Worker  *
18*bbecb9d1SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19*bbecb9d1SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*bbecb9d1SAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21*bbecb9d1SAndroid Build Coastguard Worker  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22*bbecb9d1SAndroid Build Coastguard Worker  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23*bbecb9d1SAndroid Build Coastguard Worker  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24*bbecb9d1SAndroid Build Coastguard Worker  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25*bbecb9d1SAndroid Build Coastguard Worker  *
26*bbecb9d1SAndroid Build Coastguard Worker  **************************************************************************/
27*bbecb9d1SAndroid Build Coastguard Worker 
28*bbecb9d1SAndroid Build Coastguard Worker #ifndef P_COMPILER_H
29*bbecb9d1SAndroid Build Coastguard Worker #define P_COMPILER_H
30*bbecb9d1SAndroid Build Coastguard Worker 
31*bbecb9d1SAndroid Build Coastguard Worker 
32*bbecb9d1SAndroid Build Coastguard Worker #include "c99_compat.h" /* inline, __func__, etc. */
33*bbecb9d1SAndroid Build Coastguard Worker 
34*bbecb9d1SAndroid Build Coastguard Worker #include "p_config.h"
35*bbecb9d1SAndroid Build Coastguard Worker 
36*bbecb9d1SAndroid Build Coastguard Worker #include "util/macros.h"
37*bbecb9d1SAndroid Build Coastguard Worker 
38*bbecb9d1SAndroid Build Coastguard Worker #include <stdlib.h>
39*bbecb9d1SAndroid Build Coastguard Worker #include <string.h>
40*bbecb9d1SAndroid Build Coastguard Worker #include <stddef.h>
41*bbecb9d1SAndroid Build Coastguard Worker #include <stdarg.h>
42*bbecb9d1SAndroid Build Coastguard Worker #include <limits.h>
43*bbecb9d1SAndroid Build Coastguard Worker /* (virglrenderer) To get uint typedef with musl */
44*bbecb9d1SAndroid Build Coastguard Worker #include <sys/types.h>
45*bbecb9d1SAndroid Build Coastguard Worker 
46*bbecb9d1SAndroid Build Coastguard Worker 
47*bbecb9d1SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(__WIN32__)
48*bbecb9d1SAndroid Build Coastguard Worker #define __WIN32__
49*bbecb9d1SAndroid Build Coastguard Worker #endif
50*bbecb9d1SAndroid Build Coastguard Worker 
51*bbecb9d1SAndroid Build Coastguard Worker #if defined(_MSC_VER)
52*bbecb9d1SAndroid Build Coastguard Worker 
53*bbecb9d1SAndroid Build Coastguard Worker #include <intrin.h>
54*bbecb9d1SAndroid Build Coastguard Worker 
55*bbecb9d1SAndroid Build Coastguard Worker /* Avoid 'expression is always true' warning */
56*bbecb9d1SAndroid Build Coastguard Worker #pragma warning(disable: 4296)
57*bbecb9d1SAndroid Build Coastguard Worker 
58*bbecb9d1SAndroid Build Coastguard Worker #endif /* _MSC_VER */
59*bbecb9d1SAndroid Build Coastguard Worker 
60*bbecb9d1SAndroid Build Coastguard Worker 
61*bbecb9d1SAndroid Build Coastguard Worker /*
62*bbecb9d1SAndroid Build Coastguard Worker  * Alternative stdint.h and stdbool.h headers are supplied in include/c99 for
63*bbecb9d1SAndroid Build Coastguard Worker  * systems that lack it.
64*bbecb9d1SAndroid Build Coastguard Worker  */
65*bbecb9d1SAndroid Build Coastguard Worker #include <stdint.h>
66*bbecb9d1SAndroid Build Coastguard Worker #include <stdbool.h>
67*bbecb9d1SAndroid Build Coastguard Worker 
68*bbecb9d1SAndroid Build Coastguard Worker 
69*bbecb9d1SAndroid Build Coastguard Worker #ifdef __cplusplus
70*bbecb9d1SAndroid Build Coastguard Worker extern "C" {
71*bbecb9d1SAndroid Build Coastguard Worker #endif
72*bbecb9d1SAndroid Build Coastguard Worker 
73*bbecb9d1SAndroid Build Coastguard Worker 
74*bbecb9d1SAndroid Build Coastguard Worker #if !defined(__HAIKU__) && !defined(__USE_MISC)
75*bbecb9d1SAndroid Build Coastguard Worker #if !defined(PIPE_OS_ANDROID)
76*bbecb9d1SAndroid Build Coastguard Worker typedef unsigned int       uint;
77*bbecb9d1SAndroid Build Coastguard Worker #endif
78*bbecb9d1SAndroid Build Coastguard Worker typedef unsigned short     ushort;
79*bbecb9d1SAndroid Build Coastguard Worker #endif
80*bbecb9d1SAndroid Build Coastguard Worker typedef unsigned char      ubyte;
81*bbecb9d1SAndroid Build Coastguard Worker 
82*bbecb9d1SAndroid Build Coastguard Worker typedef unsigned char boolean;
83*bbecb9d1SAndroid Build Coastguard Worker #ifndef TRUE
84*bbecb9d1SAndroid Build Coastguard Worker #define TRUE  true
85*bbecb9d1SAndroid Build Coastguard Worker #endif
86*bbecb9d1SAndroid Build Coastguard Worker #ifndef FALSE
87*bbecb9d1SAndroid Build Coastguard Worker #define FALSE false
88*bbecb9d1SAndroid Build Coastguard Worker #endif
89*bbecb9d1SAndroid Build Coastguard Worker 
90*bbecb9d1SAndroid Build Coastguard Worker #ifndef va_copy
91*bbecb9d1SAndroid Build Coastguard Worker #ifdef __va_copy
92*bbecb9d1SAndroid Build Coastguard Worker #define va_copy(dest, src) __va_copy((dest), (src))
93*bbecb9d1SAndroid Build Coastguard Worker #else
94*bbecb9d1SAndroid Build Coastguard Worker #define va_copy(dest, src) (dest) = (src)
95*bbecb9d1SAndroid Build Coastguard Worker #endif
96*bbecb9d1SAndroid Build Coastguard Worker #endif
97*bbecb9d1SAndroid Build Coastguard Worker 
98*bbecb9d1SAndroid Build Coastguard Worker 
99*bbecb9d1SAndroid Build Coastguard Worker /* XXX: Use standard `__func__` instead */
100*bbecb9d1SAndroid Build Coastguard Worker #ifndef __FUNCTION__
101*bbecb9d1SAndroid Build Coastguard Worker #  define __FUNCTION__ __func__
102*bbecb9d1SAndroid Build Coastguard Worker #endif
103*bbecb9d1SAndroid Build Coastguard Worker 
104*bbecb9d1SAndroid Build Coastguard Worker 
105*bbecb9d1SAndroid Build Coastguard Worker /* This should match linux gcc cdecl semantics everywhere, so that we
106*bbecb9d1SAndroid Build Coastguard Worker  * just codegen one calling convention on all platforms.
107*bbecb9d1SAndroid Build Coastguard Worker  */
108*bbecb9d1SAndroid Build Coastguard Worker #ifdef _MSC_VER
109*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_CDECL __cdecl
110*bbecb9d1SAndroid Build Coastguard Worker #else
111*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_CDECL
112*bbecb9d1SAndroid Build Coastguard Worker #endif
113*bbecb9d1SAndroid Build Coastguard Worker 
114*bbecb9d1SAndroid Build Coastguard Worker 
115*bbecb9d1SAndroid Build Coastguard Worker 
116*bbecb9d1SAndroid Build Coastguard Worker #if defined(__GNUC__)
117*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_DEPRECATED  __attribute__((__deprecated__))
118*bbecb9d1SAndroid Build Coastguard Worker #else
119*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_DEPRECATED
120*bbecb9d1SAndroid Build Coastguard Worker #endif
121*bbecb9d1SAndroid Build Coastguard Worker 
122*bbecb9d1SAndroid Build Coastguard Worker 
123*bbecb9d1SAndroid Build Coastguard Worker 
124*bbecb9d1SAndroid Build Coastguard Worker /* Macros for data alignment. */
125*bbecb9d1SAndroid Build Coastguard Worker #if defined(__GNUC__)
126*bbecb9d1SAndroid Build Coastguard Worker 
127*bbecb9d1SAndroid Build Coastguard Worker /* See http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Type-Attributes.html */
128*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_TYPE(_alignment, _type) _type __attribute__((aligned(_alignment)))
129*bbecb9d1SAndroid Build Coastguard Worker 
130*bbecb9d1SAndroid Build Coastguard Worker /* See http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Variable-Attributes.html */
131*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_VAR(_alignment) __attribute__((aligned(_alignment)))
132*bbecb9d1SAndroid Build Coastguard Worker 
133*bbecb9d1SAndroid Build Coastguard Worker #if defined(__GNUC__) && defined(PIPE_ARCH_X86)
134*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_STACK __attribute__((force_align_arg_pointer))
135*bbecb9d1SAndroid Build Coastguard Worker #else
136*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_STACK
137*bbecb9d1SAndroid Build Coastguard Worker #endif
138*bbecb9d1SAndroid Build Coastguard Worker 
139*bbecb9d1SAndroid Build Coastguard Worker #elif defined(_MSC_VER)
140*bbecb9d1SAndroid Build Coastguard Worker 
141*bbecb9d1SAndroid Build Coastguard Worker /* See http://msdn.microsoft.com/en-us/library/83ythb65.aspx */
142*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_TYPE(_alignment, _type) __declspec(align(_alignment)) _type
143*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_VAR(_alignment) __declspec(align(_alignment))
144*bbecb9d1SAndroid Build Coastguard Worker 
145*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_STACK
146*bbecb9d1SAndroid Build Coastguard Worker 
147*bbecb9d1SAndroid Build Coastguard Worker #elif defined(SWIG)
148*bbecb9d1SAndroid Build Coastguard Worker 
149*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_TYPE(_alignment, _type) _type
150*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_VAR(_alignment)
151*bbecb9d1SAndroid Build Coastguard Worker 
152*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_ALIGN_STACK
153*bbecb9d1SAndroid Build Coastguard Worker 
154*bbecb9d1SAndroid Build Coastguard Worker #else
155*bbecb9d1SAndroid Build Coastguard Worker 
156*bbecb9d1SAndroid Build Coastguard Worker #error "Unsupported compiler"
157*bbecb9d1SAndroid Build Coastguard Worker 
158*bbecb9d1SAndroid Build Coastguard Worker #endif
159*bbecb9d1SAndroid Build Coastguard Worker 
160*bbecb9d1SAndroid Build Coastguard Worker 
161*bbecb9d1SAndroid Build Coastguard Worker #if defined(__GNUC__)
162*bbecb9d1SAndroid Build Coastguard Worker 
163*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_READ_WRITE_BARRIER() __asm__("":::"memory")
164*bbecb9d1SAndroid Build Coastguard Worker 
165*bbecb9d1SAndroid Build Coastguard Worker #elif defined(_MSC_VER)
166*bbecb9d1SAndroid Build Coastguard Worker 
167*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_READ_WRITE_BARRIER() _ReadWriteBarrier()
168*bbecb9d1SAndroid Build Coastguard Worker 
169*bbecb9d1SAndroid Build Coastguard Worker #else
170*bbecb9d1SAndroid Build Coastguard Worker 
171*bbecb9d1SAndroid Build Coastguard Worker #warning "Unsupported compiler"
172*bbecb9d1SAndroid Build Coastguard Worker #define PIPE_READ_WRITE_BARRIER() /* */
173*bbecb9d1SAndroid Build Coastguard Worker 
174*bbecb9d1SAndroid Build Coastguard Worker #endif
175*bbecb9d1SAndroid Build Coastguard Worker 
176*bbecb9d1SAndroid Build Coastguard Worker #if defined(__cplusplus)
177*bbecb9d1SAndroid Build Coastguard Worker }
178*bbecb9d1SAndroid Build Coastguard Worker #endif
179*bbecb9d1SAndroid Build Coastguard Worker 
180*bbecb9d1SAndroid Build Coastguard Worker 
181*bbecb9d1SAndroid Build Coastguard Worker #endif /* P_COMPILER_H */
182