]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgfortran/m4/spacing.m4
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libgfortran / m4 / spacing.m4
CommitLineData
cc6d3bde 1`/* Implementation of the SPACING intrinsic
748086b7 2 Copyright 2006, 2007, 2009 Free Software Foundation, Inc.
cc6d3bde
SK
3 Contributed by Steven G. Kargl <kargl@gcc.gnu.org>
4
5This file is part of the GNU Fortran 95 runtime library (libgfortran).
6
7Libgfortran is free software; you can redistribute it and/or
8modify it under the terms of the GNU General Public
9License as published by the Free Software Foundation; either
748086b7 10version 3 of the License, or (at your option) any later version.
cc6d3bde
SK
11
12Libgfortran is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
748086b7
JJ
17Under Section 7 of GPL version 3, you are granted additional
18permissions described in the GCC Runtime Library Exception, version
193.1, as published by the Free Software Foundation.
20
21You should have received a copy of the GNU General Public License and
22a copy of the GCC Runtime Library Exception along with this program;
23see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24<http://www.gnu.org/licenses/>. */
cc6d3bde 25
cc6d3bde
SK
26#include "libgfortran.h"'
27
28include(`mtype.m4')dnl
29
adea5e16 30`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)
cc6d3bde 31
adea5e16
TK
32extern 'real_type` spacing_r'kind` ('real_type` s, int p, int emin, 'real_type` tiny);
33export_proto(spacing_r'kind`);
cc6d3bde 34
adea5e16
TK
35'real_type`
36spacing_r'kind` ('real_type` s, int p, int emin, 'real_type` tiny)
cc6d3bde
SK
37{
38 int e;
39 if (s == 0.)
40 return tiny;
adea5e16 41 frexp'q` (s, &e);
cc6d3bde
SK
42 e = e - p;
43 e = e > emin ? e : emin;
adea5e16
TK
44#if defined (HAVE_LDEXP'Q`)
45 return ldexp'q` (1., e);
4010308c 46#else
adea5e16 47 return scalbn'q` (1., e);
4010308c 48#endif
cc6d3bde
SK
49}
50
adea5e16 51#endif'