home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / ieeefp.h < prev    next >
C/C++ Source or Header  |  2004-01-30  |  5KB  |  258 lines

  1. #ifndef __IEEE_BIG_ENDIAN
  2. #ifndef __IEEE_LITTLE_ENDIAN
  3.  
  4. /* This file can define macros to choose variations of the IEEE float
  5.    format:
  6.  
  7.    _FLT_LARGEST_EXPONENT_IS_NORMAL
  8.  
  9.     Defined if the float format uses the largest exponent for finite
  10.     numbers rather than NaN and infinity representations.  Such a
  11.     format cannot represent NaNs or infinities at all, but it's FLT_MAX
  12.     is twice the IEEE value.
  13.  
  14.    _FLT_NO_DENORMALS
  15.  
  16.     Defined if the float format does not support IEEE denormals.  Every
  17.     float with a zero exponent is taken to be a zero representation.
  18.  
  19.    ??? At the moment, there are no equivalent macros above for doubles and
  20.    the macros are not fully supported by --enable-newlib-hw-fp.
  21.  
  22.    __IEEE_BIG_ENDIAN
  23.  
  24.         Defined if the float format is big endian.  This is mutually exclusive
  25.         with __IEEE_LITTLE_ENDIAN.
  26.  
  27.    __IEEE_LITTLE_ENDIAN
  28.  
  29.         Defined if the float format is little endian.  This is mutually exclusive
  30.         with __IEEE_BIG_ENDIAN.
  31.  
  32.    Note that one of __IEEE_BIG_ENDIAN or __IEEE_LITTLE_ENDIAN must be specified for a
  33.    platform or error will occur.
  34.  
  35.    __IEEE_BYTES_LITTLE_ENDIAN
  36.  
  37.         This flag is used in conjunction with __IEEE_BIG_ENDIAN to describe a situation 
  38.     whereby multiple words of an IEEE floating point are in big endian order, but the
  39.     words themselves are little endian with respect to the bytes.
  40.  
  41.    _DOUBLE_IS_32_BITS 
  42.  
  43.         This is used on platforms that support double by using the 32-bit IEEE
  44.         float type.
  45.  
  46.    _FLOAT_ARG
  47.  
  48.         This represents what type a float arg is passed as.  It is used when the type is
  49.         not promoted to double.
  50.     
  51. */
  52.  
  53. #if (defined(__arm__) || defined(__thumb__)) && !defined(__MAVERICK__)
  54. /* ARM always has big-endian words.  Within those words the byte ordering
  55.    will be big or little endian depending upon the target.  */
  56. #define __IEEE_BIG_ENDIAN
  57. #ifdef __ARMEL__
  58. #define __IEEE_BYTES_LITTLE_ENDIAN
  59. #endif
  60. #endif
  61.  
  62. #ifdef __hppa__
  63. #define __IEEE_BIG_ENDIAN
  64. #endif
  65.  
  66. #ifdef __sparc__
  67. #ifdef __LITTLE_ENDIAN_DATA__
  68. #define __IEEE_LITTLE_ENDIAN
  69. #else
  70. #define __IEEE_BIG_ENDIAN
  71. #endif
  72. #endif
  73.  
  74. #if defined(__m68k__) || defined(__mc68000__)
  75. #define __IEEE_BIG_ENDIAN
  76. #endif
  77.  
  78. #if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
  79. #define __IEEE_BIG_ENDIAN
  80. #ifdef __HAVE_SHORT_DOUBLE__
  81. # define _DOUBLE_IS_32BITS
  82. #endif
  83. #endif
  84.  
  85. #if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__)
  86. #define __IEEE_BIG_ENDIAN
  87. #define _FLOAT_ARG float
  88. #define _DOUBLE_IS_32BITS
  89. #endif
  90.  
  91. #ifdef __sh__
  92. #ifdef __LITTLE_ENDIAN__
  93. #define __IEEE_LITTLE_ENDIAN
  94. #else
  95. #define __IEEE_BIG_ENDIAN
  96. #endif
  97. #if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__)
  98. #define _DOUBLE_IS_32BITS
  99. #endif
  100. #endif
  101.  
  102. #ifdef _AM29K
  103. #define __IEEE_BIG_ENDIAN
  104. #endif
  105.  
  106. #ifdef _WIN32
  107. #define __IEEE_LITTLE_ENDIAN
  108. #endif
  109.  
  110. #ifdef __i386__
  111. #define __IEEE_LITTLE_ENDIAN
  112. #endif
  113.  
  114. #ifdef __i960__
  115. #define __IEEE_LITTLE_ENDIAN
  116. #endif
  117.  
  118. #ifdef __M32R__
  119. #define __IEEE_BIG_ENDIAN
  120. #endif
  121.  
  122. #ifdef __TIC80__
  123. #define __IEEE_LITTLE_ENDIAN
  124. #endif
  125.  
  126. #ifdef __MIPSEL__
  127. #define __IEEE_LITTLE_ENDIAN
  128. #endif
  129. #ifdef __MIPSEB__
  130. #define __IEEE_BIG_ENDIAN
  131. #endif
  132.  
  133. #ifdef __MMIX__
  134. #define __IEEE_BIG_ENDIAN
  135. #endif
  136.  
  137. #ifdef __D30V__
  138. #define __IEEE_BIG_ENDIAN
  139. #endif
  140.  
  141. /* necv70 was __IEEE_LITTLE_ENDIAN. */
  142.  
  143. #ifdef __W65__
  144. #define __IEEE_LITTLE_ENDIAN
  145. #define _DOUBLE_IS_32BITS
  146. #endif
  147.  
  148. #if defined(__Z8001__) || defined(__Z8002__)
  149. #define __IEEE_BIG_ENDIAN
  150. #endif
  151.  
  152. #ifdef __m88k__
  153. #define __IEEE_BIG_ENDIAN
  154. #endif
  155.  
  156. #ifdef __mn10300__
  157. #define __IEEE_LITTLE_ENDIAN
  158. #endif
  159.  
  160. #ifdef __mn10200__
  161. #define __IEEE_LITTLE_ENDIAN
  162. #define _DOUBLE_IS_32BITS
  163. #endif
  164.  
  165. #ifdef __v800
  166. #define __IEEE_LITTLE_ENDIAN
  167. #endif
  168.  
  169. #ifdef __v850
  170. #define __IEEE_LITTLE_ENDIAN
  171. #endif
  172.  
  173. #ifdef __D10V__
  174. #define __IEEE_BIG_ENDIAN
  175. #if __DOUBLE__ == 32
  176. #define _DOUBLE_IS_32BITS
  177. #endif
  178. #endif
  179.  
  180. #ifdef __PPC__
  181. #if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
  182. #define __IEEE_BIG_ENDIAN
  183. #else
  184. #if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
  185. #define __IEEE_LITTLE_ENDIAN
  186. #endif
  187. #endif
  188. #endif
  189.  
  190. #ifdef __xstormy16__
  191. #define __IEEE_LITTLE_ENDIAN
  192. #endif
  193.  
  194. #ifdef __arc__
  195. #ifdef __big_endian__
  196. #define __IEEE_BIG_ENDIAN
  197. #else
  198. #define __IEEE_LITTLE_ENDIAN
  199. #endif
  200. #endif
  201.  
  202. #ifdef __fr30__
  203. #define __IEEE_BIG_ENDIAN
  204. #endif
  205.  
  206. #ifdef __mcore__
  207. #define __IEEE_BIG_ENDIAN
  208. #endif
  209.  
  210. #ifdef __frv__
  211. #define __IEEE_BIG_ENDIAN
  212. #endif
  213.  
  214. #ifdef __ia64__
  215. #ifdef __BIG_ENDIAN__
  216. #define __IEEE_BIG_ENDIAN
  217. #else
  218. #define __IEEE_LITTLE_ENDIAN
  219. #endif
  220. #endif
  221.  
  222. #ifdef __AVR__
  223. #define __IEEE_LITTLE_ENDIAN
  224. #define _DOUBLE_IS_32BITS
  225. #endif
  226.  
  227. #if defined(__or32__) || defined(__or1k__) || defined(__or16__)
  228. #define __IEEE_BIG_ENDIAN
  229. #endif
  230.  
  231. #ifdef __IP2K__
  232. #define __IEEE_BIG_ENDIAN
  233. #define __SMALL_BITFIELDS
  234. #define _DOUBLE_IS_32BITS
  235. #endif
  236.  
  237. #ifdef __iq2000__
  238. #define __IEEE_BIG_ENDIAN
  239. #endif
  240.  
  241. #ifdef __MAVERICK__
  242. #ifdef __ARMEL__
  243. #  define __IEEE_LITTLE_ENDIAN
  244. #else  /* must be __ARMEB__ */
  245. #  define __IEEE_BIG_ENDIAN
  246. #endif /* __ARMEL__ */
  247. #endif /* __MAVERICK__ */
  248.  
  249. #ifndef __IEEE_BIG_ENDIAN
  250. #ifndef __IEEE_LITTLE_ENDIAN
  251. #error Endianess not declared!!
  252. #endif /* not __IEEE_LITTLE_ENDIAN */
  253. #endif /* not __IEEE_BIG_ENDIAN */
  254.  
  255. #endif /* not __IEEE_LITTLE_ENDIAN */
  256. #endif /* not __IEEE_BIG_ENDIAN */
  257.  
  258.