home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gdb-4.16-base.tgz / gdb-4.16-base.tar / fsf / gdb / include / floatformat.h < prev    next >
C/C++ Source or Header  |  1995-07-07  |  3KB  |  89 lines

  1. /* IEEE floating point support declarations, for GDB, the GNU Debugger.
  2.    Copyright (C) 1991 Free Software Foundation, Inc.
  3.  
  4. This file is part of GDB.
  5.  
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2 of the License, or
  9. (at your option) any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  19.  
  20. #if !defined (FLOATFORMAT_H)
  21. #define FLOATFORMAT_H 1
  22.  
  23. #include "ansidecl.h"
  24.  
  25. /* A floatformat consists of a sign bit, an exponent and a mantissa.  Once the
  26.    bytes are concatenated according to the byteorder flag, then each of those
  27.    fields is contiguous.  We number the bits with 0 being the most significant
  28.    (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
  29.    contains with the *_start and *_len fields.  */
  30.  
  31. enum floatformat_byteorders { floatformat_little, floatformat_big };
  32.  
  33. enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
  34.  
  35. struct floatformat
  36. {
  37.   enum floatformat_byteorders byteorder;
  38.   unsigned int totalsize;    /* Total size of number in bits */
  39.  
  40.   /* Sign bit is always one bit long.  1 means negative, 0 means positive.  */
  41.   unsigned int sign_start;
  42.  
  43.   unsigned int exp_start;
  44.   unsigned int exp_len;
  45.   /* Amount added to "true" exponent.  0x3fff for many IEEE extendeds.  */
  46.   unsigned int exp_bias;
  47.   /* Exponent value which indicates NaN.  This is the actual value stored in
  48.      the float, not adjusted by the exp_bias.  This usually consists of all
  49.      one bits.  */
  50.   unsigned int exp_nan;
  51.  
  52.   unsigned int man_start;
  53.   unsigned int man_len;
  54.  
  55.   /* Is the integer bit explicit or implicit?  */
  56.   enum floatformat_intbit intbit;
  57. };
  58.  
  59. /* floatformats for IEEE single and double, big and little endian.  */
  60.  
  61. extern const struct floatformat floatformat_ieee_single_big;
  62. extern const struct floatformat floatformat_ieee_single_little;
  63. extern const struct floatformat floatformat_ieee_double_big;
  64. extern const struct floatformat floatformat_ieee_double_little;
  65.  
  66. /* floatformats for various extendeds.  */
  67.  
  68. extern const struct floatformat floatformat_i387_ext;
  69. extern const struct floatformat floatformat_m68881_ext;
  70. extern const struct floatformat floatformat_i960_ext;
  71. extern const struct floatformat floatformat_m88110_ext;
  72. extern const struct floatformat floatformat_arm_ext;
  73.  
  74. /* Convert from FMT to a double.
  75.    FROM is the address of the extended float.
  76.    Store the double in *TO.  */
  77.  
  78. extern void
  79. floatformat_to_double PARAMS ((const struct floatformat *, char *, double *));
  80.  
  81. /* The converse: convert the double *FROM to FMT
  82.    and store where TO points.  */
  83.  
  84. extern void
  85. floatformat_from_double PARAMS ((const struct floatformat *,
  86.                  double *, char *));
  87.  
  88. #endif    /* defined (FLOATFORMAT_H) */
  89.