aboutsummaryrefslogtreecommitdiff
path: root/gdb/ieee-float.h
blob: 93255183d5ab0f3e23af76f14550b8201c06842b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* IEEE floating point support declarations, for GDB, the GNU Debugger.
   Copyright (C) 1991 Free Software Foundation, Inc.

This file is part of GDB.

GDB is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.

GDB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING.  If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

/* Parameters for extended float format:  */

struct ext_format {
  unsigned totalsize;		/* Total size of extended number */
  unsigned signbyte;		/* Byte number of sign bit */
  unsigned char signmask;	/* Mask for sign bit */
  unsigned expbyte_h;		/* High byte of exponent */
  unsigned expbyte_l;		/* Low  byte of exponent */
  unsigned manbyte_h;		/* High byte of mantissa */
  unsigned manbyte_l;		/* Low  byte of mantissa */
};

#define	TOTALSIZE	ext_format->totalsize
#define	SIGNBYTE	ext_format->signbyte
#define	SIGNMASK	ext_format->signmask
#define EXPBYTE_H	ext_format->expbyte_h
#define EXPBYTE_L	ext_format->expbyte_l
#define	MANBYTE_H	ext_format->manbyte_h
#define	MANBYTE_L	ext_format->manbyte_l

/* Actual ext_format structs for various machines are in the *-tdep.c file
   for each machine.  */

#define	EXT_EXP_NAN	0x7FFF	/* Exponent value that indicates NaN */
#define	EXT_EXP_BIAS	0x3FFF	/* Amount added to "true" exponent for ext */
#define	DBL_EXP_BIAS	 0x3FF	/* Ditto, for doubles */

/* Convert an IEEE extended float to a double.
   FROM is the address of the extended float.
   Store the double in *TO.  */

extern void
ieee_extended_to_double (
#ifdef __STDC__
	struct ext_format *ext_format, char *from, double *to
#endif
);

/* The converse: convert the double *FROM to an extended float
   and store where TO points.  */

void
double_to_ieee_extended (
#ifdef __STDC__
	struct ext_format *ext_format, double *from, char *to
#endif
);