_fpmath.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*-
  2. * Copyright (c) 2002, 2003 David Schultz <[email protected]>
  3. * Copyright (2) 2014 The FreeBSD Foundation
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. * 1. Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. * 2. Redistributions in binary form must reproduce the above copyright
  12. * notice, this list of conditions and the following disclaimer in the
  13. * documentation and/or other materials provided with the distribution.
  14. *
  15. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  16. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  19. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  20. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  21. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  23. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  24. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  25. * SUCH DAMAGE.
  26. *
  27. * $FreeBSD$
  28. */
  29. union IEEEl2bits {
  30. long double e;
  31. struct {
  32. unsigned long manl :64;
  33. unsigned long manh :48;
  34. unsigned int exp :15;
  35. unsigned int sign :1;
  36. } bits;
  37. /* TODO andrew: Check the packing here */
  38. struct {
  39. unsigned long manl :64;
  40. unsigned long manh :48;
  41. unsigned int expsign :16;
  42. } xbits;
  43. };
  44. #define LDBL_NBIT 0
  45. #define LDBL_IMPLICIT_NBIT
  46. #define mask_nbit_l(u) ((void)0)
  47. #define LDBL_MANH_SIZE 48
  48. #define LDBL_MANL_SIZE 64
  49. #define LDBL_TO_ARRAY32(u, a) do { \
  50. (a)[0] = (uint32_t)(u).bits.manl; \
  51. (a)[1] = (uint32_t)((u).bits.manl >> 32); \
  52. (a)[2] = (uint32_t)(u).bits.manh; \
  53. (a)[3] = (uint32_t)((u).bits.manh >> 32); \
  54. } while(0)