X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Finclude%2Fpipe%2Fp_compiler.h;h=2869517389f9fd851a2059ded231c5878dbcc55a;hb=6a2bdb8d013bc589247831fd7cc9943c6992d832;hp=e2766d15cd17292c68c8daad2b3b7e4569d0564e;hpb=fe14868d96d4820dba73c3a507d191b8a73c6870;p=mesa.git diff --git a/src/gallium/include/pipe/p_compiler.h b/src/gallium/include/pipe/p_compiler.h index e2766d15cd1..2869517389f 100644 --- a/src/gallium/include/pipe/p_compiler.h +++ b/src/gallium/include/pipe/p_compiler.h @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2007-2008 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -18,7 +18,7 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -29,12 +29,17 @@ #define P_COMPILER_H +#include "c99_compat.h" /* inline, __func__, etc. */ + #include "p_config.h" +#include "util/macros.h" + #include #include #include #include +#include #if defined(_WIN32) && !defined(__WIN32__) @@ -43,6 +48,8 @@ #if defined(_MSC_VER) +#include + /* Avoid 'expression is always true' warning */ #pragma warning(disable: 4296) @@ -53,15 +60,19 @@ * Alternative stdint.h and stdbool.h headers are supplied in include/c99 for * systems that lack it. */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif #include #include +#ifdef __cplusplus +extern "C" { +#endif + + #if !defined(__HAIKU__) && !defined(__USE_MISC) +#if !defined(PIPE_OS_ANDROID) typedef unsigned int uint; +#endif typedef unsigned short ushort; #endif typedef unsigned char ubyte; @@ -74,60 +85,21 @@ typedef unsigned char boolean; #define FALSE false #endif - -/* Function inlining */ -#ifndef INLINE -# ifdef __cplusplus -# define INLINE inline -# elif defined(__GNUC__) -# define INLINE __inline__ -# elif defined(_MSC_VER) -# define INLINE __inline -# elif defined(__ICL) -# define INLINE __inline -# elif defined(__INTEL_COMPILER) -# define INLINE inline -# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) -# define INLINE __inline -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) -# define INLINE inline -# elif (__STDC_VERSION__ >= 199901L) /* C99 */ -# define INLINE inline -# else -# define INLINE -# endif +#ifndef va_copy +#ifdef __va_copy +#define va_copy(dest, src) __va_copy((dest), (src)) +#else +#define va_copy(dest, src) (dest) = (src) #endif - - -/* Function visibility */ -#ifndef PUBLIC -# if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define PUBLIC __attribute__((visibility("default"))) -# else -# define PUBLIC -# endif #endif -/* The __FUNCTION__ gcc variable is generally only used for debugging. - * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. - */ +/* XXX: Use standard `__func__` instead */ #ifndef __FUNCTION__ -# if !defined(__GNUC__) -# if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) -# define __FUNCTION__ __func__ -# else -# define __FUNCTION__ "" -# endif -# endif -# if defined(_MSC_VER) && _MSC_VER < 1300 -# define __FUNCTION__ "" -# endif +# define __FUNCTION__ __func__ #endif - /* This should match linux gcc cdecl semantics everywhere, so that we * just codegen one calling convention on all platforms. */ @@ -148,7 +120,7 @@ typedef unsigned char boolean; /* Macros for data alignment. */ -#if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +#if defined(__GNUC__) /* See http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Type-Attributes.html */ #define PIPE_ALIGN_TYPE(_alignment, _type) _type __attribute__((aligned(_alignment))) @@ -156,7 +128,7 @@ typedef unsigned char boolean; /* See http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Variable-Attributes.html */ #define PIPE_ALIGN_VAR(_alignment) __attribute__((aligned(_alignment))) -#if (__GNUC__ > 4 || (__GNUC__ == 4 &&__GNUC_MINOR__>1)) && !defined(PIPE_ARCH_X86_64) +#if defined(__GNUC__) && !defined(PIPE_ARCH_X86_64) #define PIPE_ALIGN_STACK __attribute__((force_align_arg_pointer)) #else #define PIPE_ALIGN_STACK @@ -184,5 +156,24 @@ typedef unsigned char boolean; #endif +#if defined(__GNUC__) + +#define PIPE_READ_WRITE_BARRIER() __asm__("":::"memory") + +#elif defined(_MSC_VER) + +#define PIPE_READ_WRITE_BARRIER() _ReadWriteBarrier() + +#else + +#warning "Unsupported compiler" +#define PIPE_READ_WRITE_BARRIER() /* */ + +#endif + +#if defined(__cplusplus) +} +#endif + #endif /* P_COMPILER_H */