p_compiler.h revision 9343779a8c800cf72e38b09b6f5087a0df258c08
176818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell/**************************************************************************
276818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell *
36f238275c7c19f7e287b47276e6b4060c270599fMichal Krol * Copyright 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas.
476818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * All Rights Reserved.
576818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell *
676818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
776818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * copy of this software and associated documentation files (the
876818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * "Software"), to deal in the Software without restriction, including
976818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish,
1076818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to
1176818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to
1276818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * the following conditions:
1376818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell *
1476818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * The above copyright notice and this permission notice (including the
1576818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * next paragraph) shall be included in all copies or substantial portions
1676818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * of the Software.
1776818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell *
1876818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1976818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2076818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
2176818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
2276818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2376818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2476818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2576818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell *
2676818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell **************************************************************************/
2776818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
2876818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#ifndef P_COMPILER_H
2976818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#define P_COMPILER_H
3076818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
319791d7f64c5a58b9c1bf32d00c71e0e031f54f70José Fonseca
32dacfef158943665fc0d11035867d14ff1f5db332José Fonseca#include "p_config.h"
33dacfef158943665fc0d11035867d14ff1f5db332José Fonseca
3476818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#include <stdlib.h>
3576818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#include <string.h>
3676818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
37bef9b40c3904fdffea6cc426c5c82ed3ab70a902michal
38bef9b40c3904fdffea6cc426c5c82ed3ab70a902michal#if defined(_WIN32) && !defined(__WIN32__)
39bef9b40c3904fdffea6cc426c5c82ed3ab70a902michal#define __WIN32__
40bef9b40c3904fdffea6cc426c5c82ed3ab70a902michal#endif
41bef9b40c3904fdffea6cc426c5c82ed3ab70a902michal
42044c19e6b347d13df70dbc9980cec8a464afe214michal#if defined(_MSC_VER) && !defined(__MSC__)
43044c19e6b347d13df70dbc9980cec8a464afe214michal#define __MSC__
44044c19e6b347d13df70dbc9980cec8a464afe214michal#endif
45044c19e6b347d13df70dbc9980cec8a464afe214michal
46bef9b40c3904fdffea6cc426c5c82ed3ab70a902michal
47e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca#if defined(__MSC__)
48e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca
49e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca/* Avoid 'expression is always true' warning */
50e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca#pragma warning(disable: 4296)
51e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca
52e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca#endif /* __MSC__ */
53e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca
54e8de5c70e3370e9112a5facc870075eea60c4c46José Fonseca
552fc54f5bb56a7714c843fc5a6a3bb6895af9babcBriantypedef unsigned int       uint;
562fc54f5bb56a7714c843fc5a6a3bb6895af9babcBriantypedef unsigned char      ubyte;
572fc54f5bb56a7714c843fc5a6a3bb6895af9babcBriantypedef unsigned char      boolean;
582fc54f5bb56a7714c843fc5a6a3bb6895af9babcBriantypedef unsigned short     ushort;
592fc54f5bb56a7714c843fc5a6a3bb6895af9babcBriantypedef unsigned long long uint64;
6076818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
6176818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
62271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#if defined(__MSC__)
63271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca
642bca9f6457d8f766ef12891657fc2d10ea72ef54José Fonsecatypedef char               int8_t;
652bca9f6457d8f766ef12891657fc2d10ea72ef54José Fonsecatypedef unsigned char      uint8_t;
662bca9f6457d8f766ef12891657fc2d10ea72ef54José Fonsecatypedef short              int16_t;
67271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef unsigned short     uint16_t;
68271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef long               int32_t;
69271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef unsigned long      uint32_t;
70271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef long long          int64_t;
71271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef unsigned long long uint64_t;
72271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca
73271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#if defined(_WIN64)
746f238275c7c19f7e287b47276e6b4060c270599fMichal Kroltypedef __int64            intptr_t;
75271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef unsigned __int64   uintptr_t;
76271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#else
776f238275c7c19f7e287b47276e6b4060c270599fMichal Kroltypedef int                intptr_t;
78271f9dac79a9247de9a57f4d248e404bf1652a13José Fonsecatypedef unsigned int       uintptr_t;
79271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#endif
80271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca
81271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#else
82271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#include <stdint.h>
83271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#endif
84271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca
85271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca
8676818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#define TRUE  1
8776818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#define FALSE 0
8876818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
892fc54f5bb56a7714c843fc5a6a3bb6895af9babcBrian
9076818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell/* Function inlining */
9176818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#if defined(__GNUC__)
9276818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#  define INLINE __inline__
9376818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#elif defined(__MSC__)
9476818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#  define INLINE __inline
9576818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#elif defined(__ICL)
9676818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#  define INLINE __inline
9776818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#elif defined(__INTEL_COMPILER)
9876818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#  define INLINE inline
9976818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100)
10076818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#  define INLINE __inline
10176818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#else
10276818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#  define INLINE
10376818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#endif
10476818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
10576818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell
1069343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell/* This should match linux gcc cdecl semantics everywhere, so that we
1079343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell * just codegen one calling convention on all platforms.
1089343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell */
1099343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#ifdef WIN32
1109343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#define PIPE_CDECL __cdecl
1119343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#else
1129343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#define PIPE_CDECL
1139343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#endif
1149343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell
1159343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell
1169343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell
1173772441c498b997947f68e98830f72649bbc8442Brian#if defined __GNUC__
118044c19e6b347d13df70dbc9980cec8a464afe214michal#define ALIGN16_DECL(TYPE, NAME, SIZE)  TYPE NAME##___aligned[SIZE] __attribute__(( aligned( 16 ) ))
119044c19e6b347d13df70dbc9980cec8a464afe214michal#define ALIGN16_ASSIGN(NAME) NAME##___aligned
1206dc4e6ae15676cf4acdebb9c798bfa4083ad1e14Zack Rusin#define ALIGN16_ATTRIB  __attribute__(( aligned( 16 ) ))
1213772441c498b997947f68e98830f72649bbc8442Brian#else
122044c19e6b347d13df70dbc9980cec8a464afe214michal#define ALIGN16_DECL(TYPE, NAME, SIZE)  TYPE NAME##___unaligned[SIZE + 1]
123044c19e6b347d13df70dbc9980cec8a464afe214michal#define ALIGN16_ASSIGN(NAME) align16(NAME##___unaligned)
1246dc4e6ae15676cf4acdebb9c798bfa4083ad1e14Zack Rusin#define ALIGN16_ATTRIB
1253772441c498b997947f68e98830f72649bbc8442Brian#endif
1263772441c498b997947f68e98830f72649bbc8442Brian
1273772441c498b997947f68e98830f72649bbc8442Brian
1283772441c498b997947f68e98830f72649bbc8442Brian
1299343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell/**
1309343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell * For calling code-gen'd functions, phase out in favor of
1319343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell * PIPE_CDECL, above, which really means cdecl on all platforms, not
1329343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell * like the below...
1339343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell */
13465996f27f48e2212bf36e515aba82b6876398bfdBrian#if !defined(XSTDCALL)
13565996f27f48e2212bf36e515aba82b6876398bfdBrian#if defined(WIN32)
1369343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#define XSTDCALL __stdcall      /* phase this out */
13765996f27f48e2212bf36e515aba82b6876398bfdBrian#else
1389343779a8c800cf72e38b09b6f5087a0df258c08Keith Whitwell#define XSTDCALL                /* XXX: NOTE! not STDCALL! */
13965996f27f48e2212bf36e515aba82b6876398bfdBrian#endif
14065996f27f48e2212bf36e515aba82b6876398bfdBrian#endif
14165996f27f48e2212bf36e515aba82b6876398bfdBrian
14265996f27f48e2212bf36e515aba82b6876398bfdBrian
14376818b67092579585d9fcb7df1a8c133e6c94a6cKeith Whitwell#endif /* P_COMPILER_H */
144