|
|
1.1 root 1: /* Front-end tree definitions for GNU compiler.
2: Copyright (C) 1989 Free Software Foundation, Inc.
3:
4: This file is part of GNU CC.
5:
1.1.1.2 root 6: GNU CC 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 1, or (at your option)
9: any later version.
10:
1.1 root 11: GNU CC is distributed in the hope that it will be useful,
1.1.1.2 root 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 GNU CC; see the file COPYING. If not, write to
18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
1.1 root 19:
1.1.1.3 ! root 20: #ifndef REAL_H_INCLUDED
! 21: #define REAL_H_INCLUDED
! 22:
1.1 root 23: /* If we are not cross-compiling, use a `double' to represent the
24: floating-point value. Otherwise, use some other type
25: (probably a struct containing an array of longs). */
26: #ifndef REAL_VALUE_TYPE
27: #define REAL_VALUE_TYPE double
28: #else
29: #define REAL_IS_NOT_DOUBLE
30: #endif
31:
32: /* Compare two floating-point values for equality. */
33: #ifndef REAL_VALUES_EQUAL
34: #define REAL_VALUES_EQUAL(x,y) ((x) == (y))
35: #endif
36:
37: /* Compare two floating-point values for less than. */
38: #ifndef REAL_VALUES_LESS
39: #define REAL_VALUES_LESS(x,y) ((x) < (y))
40: #endif
41:
42: /* Scale X by Y powers of 2. */
43: #ifndef REAL_VALUE_LDEXP
44: #define REAL_VALUE_LDEXP(x,y) ldexp (x, y)
45: extern double ldexp ();
46: #endif
47:
48: /* Convert the string X to a floating-point value. */
49: #ifndef REAL_VALUE_ATOF
50: #define REAL_VALUE_ATOF(x) atof (x)
51: extern double atof ();
52: #endif
53:
54: /* Negate the floating-point value X. */
55: #ifndef REAL_VALUE_NEGATE
56: #define REAL_VALUE_NEGATE(x) (- (x))
57: #endif
58:
59: /* Truncate the floating-point value X to single-precision. */
60: #ifndef REAL_VALUE_TRUNCATE
61: #define REAL_VALUE_TRUNCATE(x) ((float) (x))
62: #endif
63:
64: /* Union type used for extracting real values from CONST_DOUBLEs
65: or putting them in. */
66:
67: union real_extract
68: {
69: REAL_VALUE_TYPE d;
70: int i[sizeof (REAL_VALUE_TYPE) / sizeof (int)];
71: };
72:
73: /* For a CONST_DOUBLE:
74: The usual two ints that hold the value.
1.1.1.3 ! root 75: For a DImode, that is all there are;
! 76: and CONST_DOUBLE_LOW is the low-order word and ..._HIGH the high-order.
1.1 root 77: For a float, the number of ints varies,
1.1.1.3 ! root 78: and CONST_DOUBLE_LOW is the one that should come first *in memory*.
! 79: So use &CONST_DOUBLE_LOW(r) as the address of an array of ints. */
1.1 root 80: #define CONST_DOUBLE_LOW(r) XINT (r, 2)
81: #define CONST_DOUBLE_HIGH(r) XINT (r, 3)
82:
83: /* Link for chain of all CONST_DOUBLEs in use in current function. */
84: #define CONST_DOUBLE_CHAIN(r) XEXP (r, 1)
85: /* The MEM which represents this CONST_DOUBLE's value in memory,
86: or const0_rtx if no MEM has been made for it yet,
87: or cc0_rtx if it is not on the chain. */
88: #define CONST_DOUBLE_MEM(r) XEXP (r, 0)
1.1.1.3 ! root 89:
! 90: /* Function to return a real value (not a tree node)
! 91: from a given integer constant. */
! 92: REAL_VALUE_TYPE real_value_from_int_cst ();
! 93:
! 94: #endif /* Not REAL_H_INCLUDED */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.