1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/**************************************************************************
2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
3f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
4f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2010 LunarG, Inc.
5f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * All Rights Reserved.
6f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
7f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
8f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * copy of this software and associated documentation files (the
9f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * "Software"), to deal in the Software without restriction, including
10f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * without limitation the rights to use, copy, modify, merge, publish,
11f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * distribute, sub license, and/or sell copies of the Software, and to
12f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * permit persons to whom the Software is furnished to do so, subject to
13f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * the following conditions:
14f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
15f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * The above copyright notice and this permission notice (including the
16f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * next paragraph) shall be included in all copies or substantial portions
17f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * of the Software.
18f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
19f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * DEALINGS IN THE SOFTWARE.
26f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
27f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu **************************************************************************/
28f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu
29f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu
308e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu#ifndef EGLCOMPILER_INCLUDED
318e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu#define EGLCOMPILER_INCLUDED
328e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu
338e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu
348e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu/**
35dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu * Get standard integer types
36dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu */
37dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
38dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  include <stdint.h>
39dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#elif defined(_MSC_VER)
40dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef __int8             int8_t;
41dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef unsigned __int8    uint8_t;
42dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef __int16            int16_t;
43dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef unsigned __int16   uint16_t;
44d2cb99904578b263396752975d60c8d7e2eac14bChia-I Wu   typedef __int32            int32_t;
45dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef unsigned __int32   uint32_t;
46dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef __int64            int64_t;
47dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu   typedef unsigned __int64   uint64_t;
48dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu
49dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  if defined(_WIN64)
50dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu     typedef __int64            intptr_t;
51dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu     typedef unsigned __int64   uintptr_t;
52dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  else
53dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu     typedef __int32            intptr_t;
54dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu     typedef unsigned __int32   uintptr_t;
55dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  endif
56dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu
57dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  define INT64_C(__val) __val##i64
58dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  define UINT64_C(__val) __val##ui64
59dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#else
60dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu/* hope the best instead of adding a bunch of ifdef's */
61dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#  include <stdint.h>
62dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu#endif
63dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu
64dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu
65dc516d6e2afe7f157dbe5aad1288e5624b27e093Chia-Wu/**
668e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu * Function inlining
678e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu */
681cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#ifndef inline
691cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  ifdef __cplusplus
701cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca     /* C++ supports inline keyword */
711cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif defined(__GNUC__)
721cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#    define inline __inline__
731cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif defined(_MSC_VER)
741cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#    define inline __inline
751cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif defined(__ICL)
761cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#    define inline __inline
771cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif defined(__INTEL_COMPILER)
781cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca     /* Intel compiler supports inline keyword */
791cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100)
801cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#    define inline __inline
811cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif defined(__SUNPRO_C) && defined(__C99FEATURES__)
821cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca     /* C99 supports inline keyword */
831cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  elif (__STDC_VERSION__ >= 199901L)
841cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca     /* C99 supports inline keyword */
851cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  else
861cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#    define inline
871cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#  endif
881cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#endif
891cf808c86e7e88b173a5ca0ec6fef562ecae16b3José Fonseca#ifndef INLINE
908e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu#  define INLINE inline
918e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu#endif
928e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu
938e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu
94897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu/**
95897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu * Function visibility
96897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu */
97ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#ifndef PUBLIC
98ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
99ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#    define PUBLIC __attribute__((visibility("default")))
100ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#  elif defined(_MSC_VER)
101ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#    define PUBLIC __declspec(dllexport)
102ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#  else
103ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#    define PUBLIC
104ba26631d0d936523c7a8f002cf469e569aa6d7a3Chia-I Wu#  endif
105897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu#endif
106897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu
107506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith/**
108506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith * The __FUNCTION__ gcc variable is generally only used for debugging.
109506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith * If we're not using gcc, define __FUNCTION__ as a cpp symbol here.
110506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith * Don't define it if using a newer Windows compiler.
111506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith */
112506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#ifndef __FUNCTION__
113506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith# if defined(__VMS)
114506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#  define __FUNCTION__ "VMS$NL:"
115016fc30839f0fb67bb37d4a7353a7e38749deab5Ian Romanick# elif (!defined __GNUC__) && (!defined __xlC__) && \
116506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith      (!defined(_MSC_VER) || _MSC_VER < 1300)
117506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#  if (__STDC_VERSION__ >= 199901L) /* C99 */ || \
118506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith    (defined(__SUNPRO_C) && defined(__C99FEATURES__))
119506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#   define __FUNCTION__ __func__
120506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#  else
121506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#   define __FUNCTION__ "<unknown>"
122506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#  endif
123506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith# endif
124506e27b9724e7f11350fc2454d263bea2df8ea39Alan Coopersmith#endif
125897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu
1268e92ec9fdd58bdfcdef65a995988974d3266b9adChia-I Wu#endif /* EGLCOMPILER_INCLUDED */
127