source: branches/libc-0.6/src/binutils/include/floatformat.h

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 4.2 KB
Line 
1/* IEEE floating point support declarations, for GDB, the GNU Debugger.
2 Copyright 1991, 1994, 1995, 1997, 2000 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, 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/* What is the order of the bytes. */
32
33enum floatformat_byteorders {
34
35 /* Standard little endian byte order.
36 EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
37
38 floatformat_little,
39
40 /* Standard big endian byte order.
41 EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
42
43 floatformat_big,
44
45 /* Little endian byte order but big endian word order.
46 EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
47
48 floatformat_littlebyte_bigword
49
50};
51
52enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
53
54struct floatformat
55{
56 enum floatformat_byteorders byteorder;
57 unsigned int totalsize; /* Total size of number in bits */
58
59 /* Sign bit is always one bit long. 1 means negative, 0 means positive. */
60 unsigned int sign_start;
61
62 unsigned int exp_start;
63 unsigned int exp_len;
64 /* Amount added to "true" exponent. 0x3fff for many IEEE extendeds. */
65 unsigned int exp_bias;
66 /* Exponent value which indicates NaN. This is the actual value stored in
67 the float, not adjusted by the exp_bias. This usually consists of all
68 one bits. */
69 unsigned int exp_nan;
70
71 unsigned int man_start;
72 unsigned int man_len;
73
74 /* Is the integer bit explicit or implicit? */
75 enum floatformat_intbit intbit;
76
77 /* Internal name for debugging. */
78 const char *name;
79};
80
81/* floatformats for IEEE single and double, big and little endian. */
82
83extern const struct floatformat floatformat_ieee_single_big;
84extern const struct floatformat floatformat_ieee_single_little;
85extern const struct floatformat floatformat_ieee_double_big;
86extern const struct floatformat floatformat_ieee_double_little;
87
88/* floatformat for ARM IEEE double, little endian bytes and big endian words */
89
90extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
91
92/* floatformats for various extendeds. */
93
94extern const struct floatformat floatformat_i387_ext;
95extern const struct floatformat floatformat_m68881_ext;
96extern const struct floatformat floatformat_i960_ext;
97extern const struct floatformat floatformat_m88110_ext;
98extern const struct floatformat floatformat_m88110_harris_ext;
99extern const struct floatformat floatformat_arm_ext_big;
100extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
101/* IA-64 Floating Point register spilt into memory. */
102extern const struct floatformat floatformat_ia64_spill_big;
103extern const struct floatformat floatformat_ia64_spill_little;
104extern const struct floatformat floatformat_ia64_quad_big;
105extern const struct floatformat floatformat_ia64_quad_little;
106
107/* Convert from FMT to a double.
108 FROM is the address of the extended float.
109 Store the double in *TO. */
110
111extern void
112floatformat_to_double PARAMS ((const struct floatformat *, char *, double *));
113
114/* The converse: convert the double *FROM to FMT
115 and store where TO points. */
116
117extern void
118floatformat_from_double PARAMS ((const struct floatformat *,
119 double *, char *));
120
121#endif /* defined (FLOATFORMAT_H) */
Note: See TracBrowser for help on using the repository browser.