brg_endian.h 5.1 KB

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