2 ---------------------------------------------------------------------------
3 Copyright (c) 1998-2013, Brian Gladman, Worcester, UK. All rights reserved.
5 The redistribution and use of this software (with or without changes)
6 is allowed without the payment of fees or royalties provided that:
8 source code distributions include the above copyright notice, this
9 list of conditions and the following disclaimer;
11 binary distributions include the above copyright notice, this list
12 of conditions and the following disclaimer in their documentation.
14 This software is provided 'as is' with no explicit or implied warranties
15 in respect of its operation, including, but not limited to, correctness
16 and fitness for purpose.
17 ---------------------------------------------------------------------------
18 Issue Date: 20/12/2007
24 #define IS_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */
25 #define IS_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */
27 /* Include files where endian defines and byteswap functions may reside */
29 # include <sys/isa_defs.h>
30 #elif defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __NetBSD__ )
31 # include <sys/endian.h>
32 #elif defined( BSD ) && ( BSD >= 199103 ) || defined( __APPLE__ ) || \
33 defined( __CYGWIN32__ ) || defined( __DJGPP__ ) || defined( __osf__ ) || \
35 # include <machine/endian.h>
36 #elif defined( __linux__ ) || defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
37 # if !defined( __MINGW32__ ) && !defined( _AIX )
39 # if !defined( __BEOS__ )
40 # include <byteswap.h>
45 /* Now attempt to set the define for platform byte order using any */
46 /* of the four forms SYMBOL, _SYMBOL, __SYMBOL & __SYMBOL__, which */
47 /* seem to encompass most endian symbol definitions */
49 #if defined( BIG_ENDIAN ) && defined( LITTLE_ENDIAN )
50 # if defined( BYTE_ORDER ) && BYTE_ORDER == BIG_ENDIAN
51 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
52 # elif defined( BYTE_ORDER ) && BYTE_ORDER == LITTLE_ENDIAN
53 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
55 #elif defined( BIG_ENDIAN )
56 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
57 #elif defined( LITTLE_ENDIAN )
58 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
61 #if defined( _BIG_ENDIAN ) && defined( _LITTLE_ENDIAN )
62 # if defined( _BYTE_ORDER ) && _BYTE_ORDER == _BIG_ENDIAN
63 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
64 # elif defined( _BYTE_ORDER ) && _BYTE_ORDER == _LITTLE_ENDIAN
65 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
67 #elif defined( _BIG_ENDIAN )
68 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
69 #elif defined( _LITTLE_ENDIAN )
70 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
73 #if defined( __BIG_ENDIAN ) && defined( __LITTLE_ENDIAN )
74 # if defined( __BYTE_ORDER ) && __BYTE_ORDER == __BIG_ENDIAN
75 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
76 # elif defined( __BYTE_ORDER ) && __BYTE_ORDER == __LITTLE_ENDIAN
77 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
79 #elif defined( __BIG_ENDIAN )
80 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
81 #elif defined( __LITTLE_ENDIAN )
82 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
85 #if defined( __BIG_ENDIAN__ ) && defined( __LITTLE_ENDIAN__ )
86 # if defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __BIG_ENDIAN__
87 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
88 # elif defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __LITTLE_ENDIAN__
89 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
91 #elif defined( __BIG_ENDIAN__ )
92 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
93 #elif defined( __LITTLE_ENDIAN__ )
94 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
97 /* if the platform byte order could not be determined, then try to */
98 /* set this define using common machine defines */
99 #if !defined(PLATFORM_BYTE_ORDER)
101 #if defined( __alpha__ ) || defined( __alpha ) || defined( i386 ) || \
102 defined( __i386__ ) || defined( _M_I86 ) || defined( _M_IX86 ) || \
103 defined( __OS2__ ) || defined( sun386 ) || defined( __TURBOC__ ) || \
104 defined( vax ) || defined( vms ) || defined( VMS ) || \
105 defined( __VMS ) || defined( _M_X64 )
106 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
108 #elif defined( AMIGA ) || defined( applec ) || defined( __AS400__ ) || \
109 defined( _CRAY ) || defined( __hppa ) || defined( __hp9000 ) || \
110 defined( ibm370 ) || defined( mc68000 ) || defined( m68k ) || \
111 defined( __MRC__ ) || defined( __MVS__ ) || defined( __MWERKS__ ) || \
112 defined( sparc ) || defined( __sparc) || defined( SYMANTEC_C ) || \
113 defined( __VOS__ ) || defined( __TIGCC__ ) || defined( __TANDEM ) || \
114 defined( THINK_C ) || defined( __VMCMS__ ) || defined( _AIX )
115 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
117 #elif 0 /* **** EDIT HERE IF NECESSARY **** */
118 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
119 #elif 0 /* **** EDIT HERE IF NECESSARY **** */
120 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
122 # error Please edit lines 126 or 128 in brg_endian.h to set the platform byte order