BSD 4_3_Net_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 15 Sep 1989 15:47:42 +0000 (07:47 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 15 Sep 1989 15:47:42 +0000 (07:47 -0800)
Work on file usr/src/usr.bin/gcc/cc1/real.h

Synthesized-from: CSRG/cd2/net.2

usr/src/usr.bin/gcc/cc1/real.h [new file with mode: 0644]

diff --git a/usr/src/usr.bin/gcc/cc1/real.h b/usr/src/usr.bin/gcc/cc1/real.h
new file mode 100644 (file)
index 0000000..cbf79dc
--- /dev/null
@@ -0,0 +1,94 @@
+/* Front-end tree definitions for GNU compiler.
+   Copyright (C) 1989 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifndef REAL_H_INCLUDED
+#define REAL_H_INCLUDED
+
+/* If we are not cross-compiling, use a `double' to represent the
+   floating-point value.  Otherwise, use some other type
+   (probably a struct containing an array of longs).  */
+#ifndef REAL_VALUE_TYPE
+#define REAL_VALUE_TYPE double
+#else
+#define REAL_IS_NOT_DOUBLE
+#endif
+
+/* Compare two floating-point values for equality.  */
+#ifndef REAL_VALUES_EQUAL
+#define REAL_VALUES_EQUAL(x,y) ((x) == (y))
+#endif
+
+/* Compare two floating-point values for less than.  */
+#ifndef REAL_VALUES_LESS
+#define REAL_VALUES_LESS(x,y) ((x) < (y))
+#endif
+
+/* Scale X by Y powers of 2.  */
+#ifndef REAL_VALUE_LDEXP
+#define REAL_VALUE_LDEXP(x,y) ldexp (x, y)
+extern double ldexp ();
+#endif
+
+/* Convert the string X to a floating-point value.  */
+#ifndef REAL_VALUE_ATOF
+#define REAL_VALUE_ATOF(x) atof (x)
+extern double atof ();
+#endif
+
+/* Negate the floating-point value X.  */
+#ifndef REAL_VALUE_NEGATE
+#define REAL_VALUE_NEGATE(x) (- (x))
+#endif
+
+/* Truncate the floating-point value X to single-precision.  */
+#ifndef REAL_VALUE_TRUNCATE
+#define REAL_VALUE_TRUNCATE(x) ((float) (x))
+#endif
+
+/* Union type used for extracting real values from CONST_DOUBLEs
+   or putting them in.  */
+
+union real_extract 
+{
+  REAL_VALUE_TYPE d;
+  int i[sizeof (REAL_VALUE_TYPE) / sizeof (int)];
+};
+
+/* For a CONST_DOUBLE:
+   The usual two ints that hold the value.
+   For a DImode, that is all there are;
+    and CONST_DOUBLE_LOW is the low-order word and ..._HIGH the high-order.
+   For a float, the number of ints varies,
+    and CONST_DOUBLE_LOW is the one that should come first *in memory*.
+    So use &CONST_DOUBLE_LOW(r) as the address of an array of ints.  */
+#define CONST_DOUBLE_LOW(r) XINT (r, 2)
+#define CONST_DOUBLE_HIGH(r) XINT (r, 3)
+
+/* Link for chain of all CONST_DOUBLEs in use in current function.  */
+#define CONST_DOUBLE_CHAIN(r) XEXP (r, 1)
+/* The MEM which represents this CONST_DOUBLE's value in memory,
+   or const0_rtx if no MEM has been made for it yet,
+   or cc0_rtx if it is not on the chain.  */
+#define CONST_DOUBLE_MEM(r) XEXP (r, 0)
+
+/* Function to return a real value (not a tree node)
+   from a given integer constant.  */
+REAL_VALUE_TYPE real_value_from_int_cst ();
+
+#endif /* Not REAL_H_INCLUDED */