mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-15 22:20:12 +00:00
188 lines
6.3 KiB
C
188 lines
6.3 KiB
C
/***********************************************************
|
|
|
|
Copyright 1987, 1998 The Open Group
|
|
|
|
Permission to use, copy, modify, distribute, and sell this software and its
|
|
documentation for any purpose is hereby granted without fee, provided that
|
|
the above copyright notice appear in all copies and that both that
|
|
copyright notice and this permission notice appear in supporting
|
|
documentation.
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
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 NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
OPEN GROUP 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.
|
|
|
|
Except as contained in this notice, the name of The Open Group shall not be
|
|
used in advertising or otherwise to promote the sale, use or other dealings
|
|
in this Software without prior written authorization from The Open Group.
|
|
|
|
|
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
|
|
|
All Rights Reserved
|
|
|
|
Permission to use, copy, modify, and distribute this software and its
|
|
documentation for any purpose and without fee is hereby granted,
|
|
provided that the above copyright notice appear in all copies and that
|
|
both that copyright notice and this permission notice appear in
|
|
supporting documentation, and that the name of Digital not be
|
|
used in advertising or publicity pertaining to distribution of the
|
|
software without specific, written prior permission.
|
|
|
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
|
SOFTWARE.
|
|
|
|
******************************************************************/
|
|
#ifndef XMD_H
|
|
# define XMD_H 1
|
|
/*
|
|
* Xmd.h: MACHINE DEPENDENT DECLARATIONS.
|
|
*/
|
|
|
|
/*
|
|
* Special per-machine configuration flags.
|
|
*/
|
|
# if defined(__sun) && defined(__SVR4)
|
|
# include <sys/isa_defs.h> /* Solaris: defines _LP64 if necessary */
|
|
# endif
|
|
|
|
# if defined (_LP64) || defined(__LP64__) || \
|
|
defined(__alpha) || defined(__alpha__) || \
|
|
defined(__ia64__) || defined(ia64) || \
|
|
defined(__sparc64__) || \
|
|
defined(__s390x__) || \
|
|
defined(__amd64__) || defined(amd64) || \
|
|
defined(__powerpc64__)
|
|
# if !defined(__ILP32__) /* amd64-x32 is 32bit */
|
|
# define LONG64 /* 32/64-bit architecture */
|
|
# endif /* !__ILP32__ */
|
|
# endif
|
|
|
|
/*
|
|
* Stuff to handle large architecture machines; the constants were generated
|
|
* on a 32-bit machine and must correspond to the protocol.
|
|
*/
|
|
# ifdef WORD64
|
|
# define MUSTCOPY
|
|
# endif /* WORD64 */
|
|
|
|
|
|
/*
|
|
* Definition of macro used to set constants for size of network structures;
|
|
* machines with preprocessors that can't handle all of the sz_ symbols
|
|
* can define this macro to be sizeof(x) if and only if their compiler doesn't
|
|
* pad out structures (esp. the xTextElt structure which contains only two
|
|
* one-byte fields). Network structures should always define sz_symbols.
|
|
*
|
|
* The sz_ prefix is used instead of something more descriptive so that the
|
|
* symbols are no more than 32 characters long (which causes problems for some
|
|
* compilers and preprocessors).
|
|
*
|
|
* The extra indirection is to get macro arguments to expand correctly before
|
|
* the concatenation, rather than afterward.
|
|
*/
|
|
# define _SIZEOF(x) sz_##x
|
|
# define SIZEOF(x) _SIZEOF(x)
|
|
|
|
/*
|
|
* Bitfield suffixes for the protocol structure elements, if you
|
|
* need them. Note that bitfields are not guaranteed to be signed
|
|
* (or even unsigned) according to ANSI C.
|
|
*/
|
|
# ifdef WORD64
|
|
typedef long INT64;
|
|
typedef unsigned long CARD64;
|
|
# define B32 :32
|
|
# define B16 :16
|
|
# ifdef UNSIGNEDBITFIELDS
|
|
typedef unsigned int INT32;
|
|
typedef unsigned int INT16;
|
|
# else
|
|
typedef signed int INT32;
|
|
typedef signed int INT16;
|
|
# endif
|
|
# else
|
|
# define B32
|
|
# define B16
|
|
# ifdef LONG64
|
|
typedef long INT64;
|
|
typedef int INT32;
|
|
# else
|
|
typedef long INT32;
|
|
# endif
|
|
typedef short INT16;
|
|
# endif
|
|
|
|
typedef signed char INT8;
|
|
|
|
# ifdef LONG64
|
|
typedef unsigned long CARD64;
|
|
typedef unsigned int CARD32;
|
|
# else
|
|
typedef unsigned long CARD32;
|
|
# endif
|
|
# if !defined(WORD64) && !defined(LONG64)
|
|
typedef unsigned long long CARD64;
|
|
# endif
|
|
typedef unsigned short CARD16;
|
|
typedef unsigned char CARD8;
|
|
|
|
typedef CARD32 BITS32;
|
|
typedef CARD16 BITS16;
|
|
|
|
typedef CARD8 BYTE;
|
|
typedef CARD8 BOOL;
|
|
|
|
/*
|
|
* definitions for sign-extending bitfields on 64-bit architectures
|
|
*/
|
|
# if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
|
|
# define cvtINT8toInt(val) (((val) & 0x00000080) ? ((val) | 0xffffffffffffff00) : (val))
|
|
# define cvtINT16toInt(val) (((val) & 0x00008000) ? ((val) | 0xffffffffffff0000) : (val))
|
|
# define cvtINT32toInt(val) (((val) & 0x80000000) ? ((val) | 0xffffffff00000000) : (val))
|
|
# define cvtINT8toShort(val) cvtINT8toInt(val)
|
|
# define cvtINT16toShort(val) cvtINT16toInt(val)
|
|
# define cvtINT32toShort(val) cvtINT32toInt(val)
|
|
# define cvtINT8toLong(val) cvtINT8toInt(val)
|
|
# define cvtINT16toLong(val) cvtINT16toInt(val)
|
|
# define cvtINT32toLong(val) cvtINT32toInt(val)
|
|
# else
|
|
# define cvtINT8toInt(val) (val)
|
|
# define cvtINT16toInt(val) (val)
|
|
# define cvtINT32toInt(val) (val)
|
|
# define cvtINT8toShort(val) (val)
|
|
# define cvtINT16toShort(val) (val)
|
|
# define cvtINT32toShort(val) (val)
|
|
# define cvtINT8toLong(val) (val)
|
|
# define cvtINT16toLong(val) (val)
|
|
# define cvtINT32toLong(val) (val)
|
|
# endif /* WORD64 and UNSIGNEDBITFIELDS */
|
|
|
|
|
|
|
|
# ifdef MUSTCOPY
|
|
/*
|
|
* This macro must not cast or else pointers will get aligned and be wrong
|
|
*/
|
|
# define NEXTPTR(p,t) (((char *) p) + SIZEOF(t))
|
|
# else /* else not MUSTCOPY, this is used for 32-bit machines */
|
|
/*
|
|
* this version should leave result of type (t *), but that should only be
|
|
* used when not in MUSTCOPY
|
|
*/
|
|
# define NEXTPTR(p,t) (((t *)(p)) + 1)
|
|
# endif /* MUSTCOPY - used machines whose C structs don't line up with proto */
|
|
|
|
#endif /* XMD_H */
|