Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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_32BITS
  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 traditionally used big-endian words; and within those words the
  55.    byte ordering was big or little endian depending upon the target.
  56.    Modern floating-point formats are naturally ordered; in this case
  57.    __VFP_FP__ will be defined, even if soft-float.  */
  58. #ifdef __VFP_FP__
  59. # ifdef __ARMEL__
  60. #  define __IEEE_LITTLE_ENDIAN
  61. # else
  62. #  define __IEEE_BIG_ENDIAN
  63. # endif
  64. #else
  65. # define __IEEE_BIG_ENDIAN
  66. # ifdef __ARMEL__
  67. #  define __IEEE_BYTES_LITTLE_ENDIAN
  68. # endif
  69. #endif
  70. #endif
  71.  
  72. #ifdef __hppa__
  73. #define __IEEE_BIG_ENDIAN
  74. #endif
  75.  
  76. #ifdef __SPU__
  77. #define __IEEE_BIG_ENDIAN
  78.  
  79. #define isfinite(__y) \
  80.         (__extension__ ({int __cy; \
  81.                            (sizeof (__y) == sizeof (float))  ? (1) : \
  82.                 (__cy = fpclassify(__y)) != FP_INFINITE && __cy != FP_NAN;}))
  83.  
  84. #define isinf(__x) ((sizeof (__x) == sizeof (float))  ?  (0) : __isinfd(__x))
  85. #define isnan(__x) ((sizeof (__x) == sizeof (float))  ?  (0) : __isnand(__x))
  86.  
  87. /*
  88.  * Macros for use in ieeefp.h. We can't just define the real ones here
  89.  * (like those above) as we have name space issues when this is *not*
  90.  * included via generic the ieeefp.h.
  91.  */
  92. #define __ieeefp_isnanf(x)      0
  93. #define __ieeefp_isinff(x)      0
  94. #define __ieeefp_finitef(x)     1
  95. #endif
  96.  
  97. #ifdef __sparc__
  98. #ifdef __LITTLE_ENDIAN_DATA__
  99. #define __IEEE_LITTLE_ENDIAN
  100. #else
  101. #define __IEEE_BIG_ENDIAN
  102. #endif
  103. #endif
  104.  
  105. #if defined(__m68k__) || defined(__mc68000__)
  106. #define __IEEE_BIG_ENDIAN
  107. #endif
  108.  
  109. #if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
  110. #define __IEEE_BIG_ENDIAN
  111. #ifdef __HAVE_SHORT_DOUBLE__
  112. # define _DOUBLE_IS_32BITS
  113. #endif
  114. #endif
  115.  
  116. #if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__)
  117. #define __IEEE_BIG_ENDIAN
  118. #define _FLOAT_ARG float
  119. #define _DOUBLE_IS_32BITS
  120. #endif
  121.  
  122. #if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
  123. #define __IEEE_LITTLE_ENDIAN
  124. #define _FLOAT_ARG float
  125. #define _DOUBLE_IS_32BITS
  126. #endif
  127.  
  128.  
  129. #ifdef __sh__
  130. #ifdef __LITTLE_ENDIAN__
  131. #define __IEEE_LITTLE_ENDIAN
  132. #else
  133. #define __IEEE_BIG_ENDIAN
  134. #endif
  135. #if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__)
  136. #define _DOUBLE_IS_32BITS
  137. #endif
  138. #endif
  139.  
  140. #ifdef _AM29K
  141. #define __IEEE_BIG_ENDIAN
  142. #endif
  143.  
  144. #ifdef _WIN32
  145. #define __IEEE_LITTLE_ENDIAN
  146. #endif
  147.  
  148. #ifdef __i386__
  149. #define __IEEE_LITTLE_ENDIAN
  150. #endif
  151.  
  152. #ifdef __i960__
  153. #define __IEEE_LITTLE_ENDIAN
  154. #endif
  155.  
  156. #ifdef __lm32__
  157. #define __IEEE_BIG_ENDIAN
  158. #endif
  159.  
  160. #ifdef __M32R__
  161. #define __IEEE_BIG_ENDIAN
  162. #endif
  163.  
  164. #if defined(_C4x) || defined(_C3x)
  165. #define __IEEE_BIG_ENDIAN
  166. #define _DOUBLE_IS_32BITS
  167. #endif
  168.  
  169. #ifdef __TMS320C6X__
  170. #ifdef _BIG_ENDIAN
  171. #define __IEEE_BIG_ENDIAN
  172. #else
  173. #define __IEEE_LITTLE_ENDIAN
  174. #endif
  175. #endif
  176.  
  177. #ifdef __TIC80__
  178. #define __IEEE_LITTLE_ENDIAN
  179. #endif
  180.  
  181. #ifdef __MIPSEL__
  182. #define __IEEE_LITTLE_ENDIAN
  183. #endif
  184. #ifdef __MIPSEB__
  185. #define __IEEE_BIG_ENDIAN
  186. #endif
  187.  
  188. #ifdef __MMIX__
  189. #define __IEEE_BIG_ENDIAN
  190. #endif
  191.  
  192. #ifdef __D30V__
  193. #define __IEEE_BIG_ENDIAN
  194. #endif
  195.  
  196. /* necv70 was __IEEE_LITTLE_ENDIAN. */
  197.  
  198. #ifdef __W65__
  199. #define __IEEE_LITTLE_ENDIAN
  200. #define _DOUBLE_IS_32BITS
  201. #endif
  202.  
  203. #if defined(__Z8001__) || defined(__Z8002__)
  204. #define __IEEE_BIG_ENDIAN
  205. #endif
  206.  
  207. #ifdef __m88k__
  208. #define __IEEE_BIG_ENDIAN
  209. #endif
  210.  
  211. #ifdef __mn10300__
  212. #define __IEEE_LITTLE_ENDIAN
  213. #endif
  214.  
  215. #ifdef __mn10200__
  216. #define __IEEE_LITTLE_ENDIAN
  217. #define _DOUBLE_IS_32BITS
  218. #endif
  219.  
  220. #ifdef __v800
  221. #define __IEEE_LITTLE_ENDIAN
  222. #endif
  223.  
  224. #ifdef __v850
  225. #define __IEEE_LITTLE_ENDIAN
  226. #endif
  227.  
  228. #ifdef __D10V__
  229. #define __IEEE_BIG_ENDIAN
  230. #if __DOUBLE__ == 32
  231. #define _DOUBLE_IS_32BITS
  232. #endif
  233. #endif
  234.  
  235. #ifdef __PPC__
  236. #if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
  237. #define __IEEE_BIG_ENDIAN
  238. #else
  239. #if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
  240. #define __IEEE_LITTLE_ENDIAN
  241. #endif
  242. #endif
  243. #endif
  244.  
  245. #ifdef __xstormy16__
  246. #define __IEEE_LITTLE_ENDIAN
  247. #endif
  248.  
  249. #ifdef __arc__
  250. #ifdef __big_endian__
  251. #define __IEEE_BIG_ENDIAN
  252. #else
  253. #define __IEEE_LITTLE_ENDIAN
  254. #endif
  255. #endif
  256.  
  257. #ifdef __CRX__
  258. #define __IEEE_LITTLE_ENDIAN
  259. #endif
  260.  
  261. #ifdef __fr30__
  262. #define __IEEE_BIG_ENDIAN
  263. #endif
  264.  
  265. #ifdef __mcore__
  266. #define __IEEE_BIG_ENDIAN
  267. #endif
  268.  
  269. #ifdef __mt__
  270. #define __IEEE_BIG_ENDIAN
  271. #endif
  272.  
  273. #ifdef __frv__
  274. #define __IEEE_BIG_ENDIAN
  275. #endif
  276.  
  277. #ifdef __moxie__
  278. #define __IEEE_BIG_ENDIAN
  279. #endif
  280.  
  281. #ifdef __ia64__
  282. #ifdef __BIG_ENDIAN__
  283. #define __IEEE_BIG_ENDIAN
  284. #else
  285. #define __IEEE_LITTLE_ENDIAN
  286. #endif
  287. #endif
  288.  
  289. #ifdef __AVR__
  290. #define __IEEE_LITTLE_ENDIAN
  291. #define _DOUBLE_IS_32BITS
  292. #endif
  293.  
  294. #if defined(__or32__) || defined(__or1k__) || defined(__or16__)
  295. #define __IEEE_BIG_ENDIAN
  296. #endif
  297.  
  298. #ifdef __IP2K__
  299. #define __IEEE_BIG_ENDIAN
  300. #define __SMALL_BITFIELDS
  301. #define _DOUBLE_IS_32BITS
  302. #endif
  303.  
  304. #ifdef __iq2000__
  305. #define __IEEE_BIG_ENDIAN
  306. #endif
  307.  
  308. #ifdef __MAVERICK__
  309. #ifdef __ARMEL__
  310. #  define __IEEE_LITTLE_ENDIAN
  311. #else  /* must be __ARMEB__ */
  312. #  define __IEEE_BIG_ENDIAN
  313. #endif /* __ARMEL__ */
  314. #endif /* __MAVERICK__ */
  315.  
  316. #ifdef __m32c__
  317. #define __IEEE_LITTLE_ENDIAN
  318. #define __SMALL_BITFIELDS
  319. #endif
  320.  
  321. #ifdef __CRIS__
  322. #define __IEEE_LITTLE_ENDIAN
  323. #endif
  324.  
  325. #ifdef __BFIN__
  326. #define __IEEE_LITTLE_ENDIAN
  327. #endif
  328.  
  329. #ifdef __x86_64__
  330. #define __IEEE_LITTLE_ENDIAN
  331. #endif
  332.  
  333. #ifdef __mep__
  334. #ifdef __LITTLE_ENDIAN__
  335. #define __IEEE_LITTLE_ENDIAN
  336. #else
  337. #define __IEEE_BIG_ENDIAN
  338. #endif
  339. #endif
  340.  
  341. #ifdef __MICROBLAZE__
  342. #define __IEEE_BIG_ENDIAN
  343. #endif
  344.  
  345. #ifdef __RX__
  346.  
  347. #ifdef __RX_BIG_ENDIAN__
  348. #define __IEEE_BIG_ENDIAN
  349. #else
  350. #define __IEEE_LITTLE_ENDIAN
  351. #endif
  352.  
  353. #ifndef __RX_64BIT_DOUBLES__
  354. #define _DOUBLE_IS_32BITS
  355. #endif
  356.  
  357. #ifdef __RX_16BIT_INTS__
  358. #define __SMALL_BITFIELDS
  359. #endif
  360.  
  361. #endif
  362.  
  363. #ifndef __IEEE_BIG_ENDIAN
  364. #ifndef __IEEE_LITTLE_ENDIAN
  365. #error Endianess not declared!!
  366. #endif /* not __IEEE_LITTLE_ENDIAN */
  367. #endif /* not __IEEE_BIG_ENDIAN */
  368.  
  369. #endif /* not __IEEE_LITTLE_ENDIAN */
  370. #endif /* not __IEEE_BIG_ENDIAN */
  371.  
  372.