xref: /PHP-7.4/ext/hash/sha3/generic64lc/brg_endian.h (revision 91663a92)
1 /*
2  ---------------------------------------------------------------------------
3  Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
4 
5  LICENSE TERMS
6 
7  The redistribution and use of this software (with or without changes)
8  is allowed without the payment of fees or royalties provided that:
9 
10   1. source code distributions include the above copyright notice, this
11      list of conditions and the following disclaimer;
12 
13   2. binary distributions include the above copyright notice, this list
14      of conditions and the following disclaimer in their documentation;
15 
16   3. the name of the copyright holder is not used to endorse products
17      built using this software without specific written permission.
18 
19  DISCLAIMER
20 
21  This software is provided 'as is' with no explicit or implied warranties
22  in respect of its properties, including, but not limited to, correctness
23  and/or fitness for purpose.
24  ---------------------------------------------------------------------------
25  Issue Date: 20/12/2007
26  Changes for ARM 9/9/2010
27 */
28 
29 #ifndef _BRG_ENDIAN_H
30 #define _BRG_ENDIAN_H
31 
32 #define IS_BIG_ENDIAN      4321 /* byte 0 is most significant (mc68k) */
33 #define IS_LITTLE_ENDIAN   1234 /* byte 0 is least significant (i386) */
34 
35 #if 0
36 /* Include files where endian defines and byteswap functions may reside */
37 #if defined( __sun )
38 #  include <sys/isa_defs.h>
39 #elif defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __NetBSD__ )
40 #  include <sys/endian.h>
41 #elif defined( BSD ) && ( BSD >= 199103 ) || defined( __APPLE__ ) || \
42       defined( __CYGWIN32__ ) || defined( __DJGPP__ ) || defined( __osf__ )
43 #  include <machine/endian.h>
44 #elif defined( __linux__ ) || defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
45 #  if !defined( __MINGW32__ ) && !defined( _AIX )
46 #    include <endian.h>
47 #    if !defined( __BEOS__ )
48 #      include <byteswap.h>
49 #    endif
50 #  endif
51 #endif
52 #endif
53 
54 /* Now attempt to set the define for platform byte order using any  */
55 /* of the four forms SYMBOL, _SYMBOL, __SYMBOL & __SYMBOL__, which  */
56 /* seem to encompass most endian symbol definitions                 */
57 
58 #if defined( BIG_ENDIAN ) && defined( LITTLE_ENDIAN )
59 #  if defined( BYTE_ORDER ) && BYTE_ORDER == BIG_ENDIAN
60 #    define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
61 #  elif defined( BYTE_ORDER ) && BYTE_ORDER == LITTLE_ENDIAN
62 #    define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
63 #  endif
64 #elif defined( BIG_ENDIAN )
65 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
66 #elif defined( LITTLE_ENDIAN )
67 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
68 #endif
69 
70 #if defined( _BIG_ENDIAN ) && defined( _LITTLE_ENDIAN )
71 #  if defined( _BYTE_ORDER ) && _BYTE_ORDER == _BIG_ENDIAN
72 #    define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
73 #  elif defined( _BYTE_ORDER ) && _BYTE_ORDER == _LITTLE_ENDIAN
74 #    define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
75 #  endif
76 #elif defined( _BIG_ENDIAN )
77 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
78 #elif defined( _LITTLE_ENDIAN )
79 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
80 #endif
81 
82 #if defined( __BIG_ENDIAN ) && defined( __LITTLE_ENDIAN )
83 #  if defined( __BYTE_ORDER ) && __BYTE_ORDER == __BIG_ENDIAN
84 #    define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
85 #  elif defined( __BYTE_ORDER ) && __BYTE_ORDER == __LITTLE_ENDIAN
86 #    define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
87 #  endif
88 #elif defined( __BIG_ENDIAN )
89 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
90 #elif defined( __LITTLE_ENDIAN )
91 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
92 #endif
93 
94 #if defined( __BIG_ENDIAN__ ) && defined( __LITTLE_ENDIAN__ )
95 #  if defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __BIG_ENDIAN__
96 #    define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
97 #  elif defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __LITTLE_ENDIAN__
98 #    define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
99 #  endif
100 #elif defined( __BIG_ENDIAN__ )
101 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
102 #elif defined( __LITTLE_ENDIAN__ )
103 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
104 #endif
105 
106 /*  if the platform byte order could not be determined, then try to */
107 /*  set this define using common machine defines                    */
108 #if !defined(PLATFORM_BYTE_ORDER)
109 
110 #if   defined( __alpha__ ) || defined( __alpha ) || defined( i386 )       || \
111       defined( __i386__ )  || defined( _M_I86 )  || defined( _M_IX86 )    || \
112       defined( __OS2__ )   || defined( sun386 )  || defined( __TURBOC__ ) || \
113       defined( vax )       || defined( vms )     || defined( VMS )        || \
114       defined( __VMS )     || defined( _M_X64 )
115 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
116 
117 #elif defined( AMIGA )   || defined( applec )    || defined( __AS400__ )  || \
118       defined( _CRAY )   || defined( __hppa )    || defined( __hp9000 )   || \
119       defined( ibm370 )  || defined( mc68000 )   || defined( m68k )       || \
120       defined( __MRC__ ) || defined( __MVS__ )   || defined( __MWERKS__ ) || \
121       defined( sparc )   || defined( __sparc)    || defined( SYMANTEC_C ) || \
122       defined( __VOS__ ) || defined( __TIGCC__ ) || defined( __TANDEM )   || \
123       defined( THINK_C ) || defined( __VMCMS__ ) || defined( _AIX )
124 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
125 
126 #elif defined(__arm__)
127 # ifdef __BIG_ENDIAN
128 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
129 # else
130 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
131 # endif
132 #elif 1     /* **** EDIT HERE IF NECESSARY **** */
133 #  define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
134 #elif 0     /* **** EDIT HERE IF NECESSARY **** */
135 #  define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
136 #else
137 #  error Please edit lines 132 or 134 in brg_endian.h to set the platform byte order
138 #endif
139 
140 #endif
141 
142 #endif
143