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