sources-request@panda.UUCP (11/08/85)
Mod.sources: Volume 3, Issue 37
Submitted by: J.D.Aplevich <watmath!watdcsu!aplevich>
This and three following files contain patches for convert-
ing the source for the Ultrix/BSD4.2 f77 compiler to run on
and to produce code for G-format Vaxes.
On a G (IEEE standard) format Vax, a "double" floating-point
number is represented by 1 sign bit, 11 exponent bits, and
52 bit significand, whereas on D-format machines a double is
represented by 1 sign bit, 7 exponent bits, and 56 bit sig-
nificand. Thus the numerical consequences of G-format are
increased dynamic range at the expense of 4 bits of preci-
sion.
In both formats a "float" is the same as the left 32 bits of
the D-format double, and consequently on a G-format machine,
any code will fail that explicitly requires a float to be
the top half of a double, as it is on the older D-format
machines. Examples are the Unix C and f77 compilers, and
code produced by them.
Some G-format machines are: certain versions of the MicroVax
I, (which also emulates D-format instructions, with loss of
precision), and the MicroVax II, which supports both
representations, as do larger Vaxes with microcode options.
DEC does not supply either f77 or Pascal G-format compilers
for Ultrix.
If one is equipped with a source license, it is possible to
produce the patches required for converting the Ultrix (or
BSD 4.2) compiler to G-format. It is also necessary to have
G-format system libraries (libc, libm) as in G-format Ul-
trix, (but these are NOT included here).
Because f77 is a moving target, some of these patches are
context diffs, rather than ordinary diffs. They convert f77
source files to versions containing #ifdef GFLOAT switches
although it would also be simple to have G-format as a com-
piler option, as in Ultrix C. The widely-used patch program
from L. Wall is recommended to handle the details. It would
have made sense to include its source here but that would
have increased the size of the distribution by 50Kb. The
shar archives are of the directory `gfloat', which contains
patches to routines from f77/src/f1, f77/src/f2,
f77/src/f77pass1, libF77, and libU77. A makefile is includ-
ed to handle most of the details, as are fixes for a couple
of libc.a and libm.a routines.
CAVEAT COMPUTOR:
The code that results from these patches is, of course, not
guaranteed to be bug-free, but has been tested by use on ap-
plications programs. It may be that we have not exercised
code in which bugs exist.
ACKNOWLEDGMENT:
This material is a by-product of a project undertaken with
the support of WATDEC, a University of Waterloo, Digital
Equipment of Canada research contract.
SPECIAL BONUS OFFER: pc (Pascal)!
Once f77 works, it is very simple to get a usable pc working
on a G-format machine. Some strings in /usr/lib/pc0 and
/usr/lib/pc2 have to be changed using adb. In the version
we have, in pc0 we change
`double 0d' at location 18284 to `gfloat 0g'
and in pc2, we change
`cvtrdl' at location 100e to `cvtrgl',
`cvtdl' at location 102a to `cvtgl',
`cvtld' at location 197f to `cvtlg',
`divd2' at location 198b to `divg2',
`0d2.' at location 1993 to `0g2.'
It might be necessary to locate these strings using
`od -s <file> 0x0' .
-------------- cut here --------------------------------------------
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# gfloat
# This archive created: Tue Oct 29 20:28:27 1985
export PATH; PATH=/bin:$PATH
if test ! -d 'gfloat'
then
mkdir 'gfloat'
fi
cd 'gfloat'
if test -f 'Makefile'
then
echo shar: over-writing existing file "'Makefile'"
fi
cat << \SHAR_EOF > 'Makefile'
# Files changed in G-float code.
f1FILES = local2.c otable.c table.c Makefile
f2FILES = c22.c Makefile
pass1FILES = bb.c\
conv.c\
conv.h\
defs.h\
expr.c\
intr.c\
optcse.c\
optloop.c\
put.c\
vax.c\
Makefile
libF77FILES = \
opcodes.h\
besj0_.c\
besj1_.c\
besjn_.c\
besy0_.c\
besy1_.c\
besyn_.c\
c_abs.c\
erf_.c\
erfc_.c\
pow_ri.c\
r_abs.c\
r_acos.c\
r_asin.c\
r_atan.c\
r_atn2.c\
r_cos.c\
r_cosh.c\
r_dim.c\
r_exp.c\
r_imag.c\
r_int.c\
r_lg10.c\
r_log.c\
r_mod.c\
r_nint.c\
r_sign.c\
r_sin.c\
r_sinh.c\
r_sqrt.c\
r_tan.c\
r_tanh.c\
rand_.c\
range.c\
trapov_.c\
trpfpe_.c\
Makefile
libU77FILES =\
dtime_.c\
Makefile
LIB =
FILES =
DFLG =
# Generate diffs between original source and G-float switched source.
# Diffs are put into the local diff directories only.
diffs: f1diffs f2diffs pass1diffs libFdiffs libUdiffs
cdiffs:
@make DFLG="-c" diffs
netdiffs:
@make DFLG="-c" f1diffs
@make f2diffs
@make DFLG="-c" pass1diffs
@make libFdiffs
@make libUdiffs
f1diffs:
@make FILES="$(f1FILES)" LIB=f77/src/f1 DFLG="$(DFLG)" mkdiffs
f2diffs:
@make FILES="$(f2FILES)" LIB=f77/src/f2 DFLG="$(DFLG)" mkdiffs
pass1diffs:
@make FILES="$(pass1FILES)" LIB=f77/src/f77pass1 DFLG="$(DFLG)" mkdiffs
libFdiffs:
@make FILES="$(libF77FILES)" LIB=libF77 DFLG="$(DFLG)" mkdiffs
libUdiffs:
@make FILES="$(libU77FILES)" LIB=libU77 DFLG="$(DFLG)" mkdiffs
mkdiffs:
@-for i in ${FILES} ; do echo $(LIB)/$$i.diff ; \
diff $(DFLG) ../$(LIB)/$$i.orig ../$(LIB)/$$i > $(LIB)/$$i.diff ; done
# Remove local diff files.
cleandiffs:
rm -f f77/src/f1/*.diff
rm -f f77/src/f2/*.diff
rm -f f77/src/f77pass1/*.diff
rm -f libF77/*.diff
rm -f libU77/*.diff
reallyclean:
make orig
(cd ../f77/src/f77; rm -f *.o mkvers Version Version.c)
(cd ../f77/src/f1; rm -f *.o mkvers Version Version.c)
(cd ../f77/src/f2; rm -f *.o mkvers Version Version.c)
(cd ../f77/src/f77pass1; rm -f *.o mkvers Version Version.c \
tokdefs.h gram.in gram.c)
(cd ../libF77; rm -f *.o mkvers Version Version.c *.a mkindx)
(cd ../libF77/profiled; rm -f *.o mkvers Version Version.c)
(cd ../libI77; rm -f *.o mkvers Version Version.c *.a mkindx)
(cd ../libI77/profiled; rm -f *.o mkvers Version Version.c)
(cd ../libU77; rm -f *.o mkvers Version Version.c *.a mkindx)
(cd ../libU77/profiled; rm -f *.o mkvers Version Version.c)
all:
make mods
(cd ../f77; make install)
(cd ../libF77; make install)
(cd ../libI77; make install)
(cd ../libU77; make install)
# Apply local diff files to local source, moving source to *.orig.
mods: f1mods f2mods pass1mods libFmods libUmods
f1mods:
@make FILES="$(f1FILES)" LIB=f77/src/f1 makemod
f2mods:
@make FILES="$(f2FILES)" LIB=f77/src/f2 makemod
pass1mods:
@make FILES="$(pass1FILES)" LIB=f77/src/f77pass1 makemod
libFmods:
@make FILES="$(libF77FILES)" LIB=libF77 makemod
libUmods:
@make FILES="$(libU77FILES)" LIB=libU77 makemod
makemod:
@-for i in ${FILES} ; do if test ! -f ../$(LIB)/$$i.orig ; then \
echo $(LIB)/$$i ; patch ../$(LIB)/$$i $(LIB)/$$i.diff ; \
fi done
# Move *.orig files back in place, restoring source to original condition.
orig: f1orig f2orig pass1orig libForig libUorig
f1orig:
@make FILES="$(f1FILES)" LIB=f77/src/f1 makeorig
f2orig:
@make FILES="$(f2FILES)" LIB=f77/src/f2 makeorig
pass1orig:
@make FILES="$(pass1FILES)" LIB=f77/src/f77pass1 makeorig
libForig:
@make FILES="$(libF77FILES)" LIB=libF77 makeorig
libUorig:
@make FILES="$(libU77FILES)" LIB=libU77 makeorig
makeorig:
@-for i in $(FILES); do if test -f $(LIB)/$$i.diff ; then \
mv ../$(LIB)/$$i.orig ../$(LIB)/$$i; fi done
SHAR_EOF
chmod +x 'Makefile'
if test -f 'READ_ME'
then
echo shar: over-writing existing file "'READ_ME'"
fi
cat << \SHAR_EOF > 'READ_ME'
This directory contains a makefile for handling the
differences between the f77 compiler source and the modified
source with G-float switches in it.
An original f77 source is kept, along with a directory
tree in gfloat (this directory) containing diff(1) files for
constructing a source containing `#ifdef GFLOAT' switches.
1. To make a source containing the G-float switches, put
this (gfloat) directory into the new source directory
at the same level as the libF77, LibU77, and f77 source
directories (or links to them). That is, the command
`lc' should give something like
Directories:
f77 gfloat libF77 libI77 libU77
Now in gfloat, type `make mods'. In each directory,
original files will be copied into *.orig before being
replaced by modified files of the original name, so you
need write permission everywhere.
To help avoid blunders, if a *.orig file already
exists, the file modification is silently ignored.
If the source is not identical to the source from which
the diff files were made and context diffs were not
used, patch may fail. In this case, the following may
be tried:
a) Apply `make mods' to the original source from
which the diffs were obtained (if you have it, of
course).
b) Type `make cdiffs' to create context diff files
(see 3. below), copy the resulting gfloat direc-
tory as before into the directory of the new
source, and try `make mods' again. This time
patch is using context diffs, and should have more
success. Correct patches are of course not
guaranteed, but gross failures are detected. They
have to be corrected by hand.
2. To restore the source directory to original form, type
`make orig', which moves the *.orig files back into
place. To help avoid losing modified files obtained at
much sweat, the move is ignored if an appropriate .diff
file does not exist. However the time of last modifi-
cation is not checked.
3. To compile and install the G-float code, do step 1
above, then in f77, libF77, libI77, and libU77 type
`make' or `make install' in the usual way, since the
relevant Makefiles are modified to include the -DGFLOAT
CFLAG. If you are really optimistic, type `make all'
from here and come back in about 3 hours.
4. To compute the diff files, use make diffs Which con-
structs the diff files from the *.c and *.c.orig files.
Note that diff(1) correctly returns Error code 1 mes-
sages. Directories containing changed files are:
f77/src/f1
f77/src/f2
f77/src/f77pass1
libF77
libU77
If more files have to be modified, be sure to copy the
original into *.orig first, and include the file name
in the appropriate place in Makefile.
Because the f77 source is a moving target, context
diffs may be required, and this is where the patch pro-
gram comes in handy. To make context diffs, use `make
cdiffs'.
5. The Ultrix G-float C compiler contains a bug. For
example, a call to the modified libF77/r_sin.c routine
float r_sin(x)
float *x;
{
double sin();
return( sin(*x) );
}
returns a $#?!!*#@ double (NOT a float) in register 0.
Refer to section 9.10 of "The C Programming Language -
Reference Manual" by Dennis M. Ritchie. This is
invisible when programming in C because the compiler
has another bug that treats the returned value of a
float function as a double. The bug becomes visible
when we interface assembly language to C, or as here,
hack a compiler to produce assembly language which
calls functions written and compiled in C. An ugly
union has had to be used to force a float return in a
bunch of library functions, since accepting it as dou-
ble would coerce the fortran expression containing the
function reference to be double precision.
SHAR_EOF
chmod +x 'READ_ME'
if test ! -d 'libF77'
then
mkdir 'libF77'
fi
cd 'libF77'
if test -f 'c_abs.c.diff'
then
echo shar: over-writing existing file "'c_abs.c.diff'"
fi
cat << \SHAR_EOF > 'c_abs.c.diff'
11c11,17
<
---
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = cabs( z->real, z->imag );
> return( res.d );
> #else GFLOAT
12a19
> #endif GFLOAT
SHAR_EOF
chmod +x 'c_abs.c.diff'
if test -f 'opcodes.h.diff'
then
echo shar: over-writing existing file "'opcodes.h.diff'"
fi
cat << \SHAR_EOF > 'opcodes.h.diff'
2c2
< * "@(#)opcodes.h 1.1" Vax op codes defined here
---
> * "@(#)opcodes.h 1.2" Vax op codes defined here
7a8
> # define ACBG 0x4ffd
9a11
> # define ADDG2 0x40fd
10a13
> # define ADDG3 0x41fd
13a17
> # define CMPG 0x51fd
14a19
> # define CVTBG 0x4cfd
15a21
> # define CVTGB 0x48fd
16a23
> # define CVTGF 0x33fd
17a25
> # define CVTGL 0x4afd
18a27
> # define CVTGW 0x49fd
20a30
> # define CVTFG 0x56fd
23a34
> # define CVTRGL 0x4bfd
25a37
> # define DIVG2 0x46fd
26a39
> # define DIVG3 0x47fd
29a43
> # define EMODG 0x54fd
31a46
> # define MNEGG 0x52fd
33a49
> # define MOVG 0x50fd
35a52
> # define MULG2 0x44fd
36a54
> # define MULG3 0x45fd
39a58
> # define POLYG 0x55fd
41a61
> # define SUBG2 0x42fd
42a63
> # define SUBG3 0x43fd
45a67
> # define TSTG 0x53fd
SHAR_EOF
chmod +x 'opcodes.h.diff'
if test -f 'r_abs.c.diff'
then
echo shar: over-writing existing file "'r_abs.c.diff'"
fi
cat << \SHAR_EOF > 'r_abs.c.diff'
7a8
> #ifndef GFLOAT
10a12,20
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = *x;
> if(*x >= 0)
> return( res.d );
> return( -res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_abs.c.diff'
if test -f 'r_acos.c.diff'
then
echo shar: over-writing existing file "'r_acos.c.diff'"
fi
cat << \SHAR_EOF > 'r_acos.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = acos( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_acos.c.diff'
if test -f 'r_asin.c.diff'
then
echo shar: over-writing existing file "'r_asin.c.diff'"
fi
cat << \SHAR_EOF > 'r_asin.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = asin( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_asin.c.diff'
if test -f 'r_atan.c.diff'
then
echo shar: over-writing existing file "'r_atan.c.diff'"
fi
cat << \SHAR_EOF > 'r_atan.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = atan( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_atan.c.diff'
if test -f 'r_atn2.c.diff'
then
echo shar: over-writing existing file "'r_atn2.c.diff'"
fi
cat << \SHAR_EOF > 'r_atn2.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = atan2(*x,*y);
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_atn2.c.diff'
if test -f 'r_cos.c.diff'
then
echo shar: over-writing existing file "'r_cos.c.diff'"
fi
cat << \SHAR_EOF > 'r_cos.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = cos( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_cos.c.diff'
if test -f 'r_cosh.c.diff'
then
echo shar: over-writing existing file "'r_cosh.c.diff'"
fi
cat << \SHAR_EOF > 'r_cosh.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = cosh( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_cosh.c.diff'
if test -f 'r_dim.c.diff'
then
echo shar: over-writing existing file "'r_dim.c.diff'"
fi
cat << \SHAR_EOF > 'r_dim.c.diff'
7a8
> #ifndef GFLOAT
8a10,16
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = *a - *b;
> return( *a > *b ? res.d : 0);
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_dim.c.diff'
if test -f 'r_exp.c.diff'
then
echo shar: over-writing existing file "'r_exp.c.diff'"
fi
cat << \SHAR_EOF > 'r_exp.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = exp( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_exp.c.diff'
if test -f 'r_imag.c.diff'
then
echo shar: over-writing existing file "'r_imag.c.diff'"
fi
cat << \SHAR_EOF > 'r_imag.c.diff'
9a10
> #ifndef GFLOAT
10a12,18
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = z->imag;
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_imag.c.diff'
if test -f 'r_int.c.diff'
then
echo shar: over-writing existing file "'r_int.c.diff'"
fi
cat << \SHAR_EOF > 'r_int.c.diff'
8a9
> #ifndef GFLOAT
10a12,18
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = (*x >= 0) ? floor(*x) : -floor(- *x);
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_int.c.diff'
if test -f 'r_lg10.c.diff'
then
echo shar: over-writing existing file "'r_lg10.c.diff'"
fi
cat << \SHAR_EOF > 'r_lg10.c.diff'
10a11
> #ifndef GFLOAT
12a14,20
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = log10e * log( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_lg10.c.diff'
if test -f 'r_log.c.diff'
then
echo shar: over-writing existing file "'r_log.c.diff'"
fi
cat << \SHAR_EOF > 'r_log.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = log( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_log.c.diff'
if test -f 'r_mod.c.diff'
then
echo shar: over-writing existing file "'r_mod.c.diff'"
fi
cat << \SHAR_EOF > 'r_mod.c.diff'
7a8,12
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> #endif GFLOAT
12a18
> #ifndef GFLOAT
13a20,23
> #else GFLOAT
> res.r[0] = *x - (*y) * quotient;
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_mod.c.diff'
if test -f 'r_nint.c.diff'
then
echo shar: over-writing existing file "'r_nint.c.diff'"
fi
cat << \SHAR_EOF > 'r_nint.c.diff'
8a9,13
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> #endif GFLOAT
9a15
> #ifndef GFLOAT
11a18,22
> #else GFLOAT
> res.r[0] = (*x)>=0 ?
> floor(*x + .5) : -floor(.5 - *x);
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_nint.c.diff'
if test -f 'r_sign.c.diff'
then
echo shar: over-writing existing file "'r_sign.c.diff'"
fi
cat << \SHAR_EOF > 'r_sign.c.diff'
8a9,13
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> #endif GFLOAT
9a15
> #ifndef GFLOAT
10a17,20
> #else GFLOAT
> res.r[0] = *b >= 0 ? x : -x;
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_sign.c.diff'
if test -f 'r_sin.c.diff'
then
echo shar: over-writing existing file "'r_sin.c.diff'"
fi
cat << \SHAR_EOF > 'r_sin.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = sin( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_sin.c.diff'
if test -f 'r_sinh.c.diff'
then
echo shar: over-writing existing file "'r_sinh.c.diff'"
fi
cat << \SHAR_EOF > 'r_sinh.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = sinh( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_sinh.c.diff'
if test -f 'r_sqrt.c.diff'
then
echo shar: over-writing existing file "'r_sqrt.c.diff'"
fi
cat << \SHAR_EOF > 'r_sqrt.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = sqrt( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_sqrt.c.diff'
if test -f 'r_tan.c.diff'
then
echo shar: over-writing existing file "'r_tan.c.diff'"
fi
cat << \SHAR_EOF > 'r_tan.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = tan( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_tan.c.diff'
if test -f 'r_tanh.c.diff'
then
echo shar: over-writing existing file "'r_tanh.c.diff'"
fi
cat << \SHAR_EOF > 'r_tanh.c.diff'
8a9
> #ifndef GFLOAT
9a11,17
> #else GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = tanh( *x );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'r_tanh.c.diff'
if test -f 'range.c.diff'
then
echo shar: over-writing existing file "'range.c.diff'"
fi
cat << \SHAR_EOF > 'range.c.diff'
77a78,81
> #ifndef GFLOAT
> #else GFLOAT
> n.j[0] = 0x00000010;
> #endif GFLOAT
117a122
> #ifndef GFLOAT
118a124,126
> #else GFLOAT
> n.j[0] = 0x0000681e;
> #endif GFLOAT
SHAR_EOF
chmod +x 'range.c.diff'
if test -f 'trapov_.c.diff'
then
echo shar: over-writing existing file "'trapov_.c.diff'"
fi
cat << \SHAR_EOF > 'trapov_.c.diff'
55a56,58
> #ifdef GFLOAT
> # define G 4
> #endif GFLOAT
241a245,249
> #ifdef GFLOAT
> /* kludge for Gfloat */
> if (operand_type(opcode, o_no)==F && (fetch_byte() & 0xff)==0xfd)
> opcode = opcode<<8 + 0xfd;
> #endif GFLOAT
250a259
> #ifndef GFLOAT
251a261,263
> #else GFLOAT
> if (opcode == POLYG || opcode == POLYF) {
> #endif GFLOAT
255a268
> #ifndef GFLOAT
256a270,272
> #else GFLOAT
> if (opcode == EMODG || opcode == EMODF) {
> #endif GFLOAT
266a283
> #ifndef GFLOAT
267a285,287
> #else GFLOAT
> if (type != F && type != G) {
> #endif GFLOAT
272c292
< /* F or D operand. Check it out */
---
> /* F or D (or G) operand. Check it out */
282a303
> #ifndef GFLOAT
283a305,307
> #else GFLOAT
> } else if (type == G && opnd->o_long == 0x00008000) {
> #endif GFLOAT
307a332
> #ifndef GFLOAT
317a343,354
> #else GFLOAT
> case ACBG: case ACBF: case ADDG2: case ADDG3:
> case ADDF2: case ADDF3: case CMPG: case CMPF:
> case CVTGB: case CVTGF: case CVTGL: case CVTGW:
> case CVTFB: case CVTFG: case CVTFL: case CVTFW:
> case CVTRGL: case CVTRFL: case DIVG2: case DIVG3:
> case DIVF2: case DIVF3: case EMODG: case EMODF:
> case MNEGG: case MNEGF: case MOVG: case MOVF:
> case MULG2: case MULG3: case MULF2: case MULF3:
> case POLYG: case POLYF: case SUBG2: case SUBG3:
> case SUBF2: case SUBF3: case TSTG: case TSTF:
> #endif GFLOAT
325c362
< * got_illegal_poly - handle an illegal POLY[DF] instruction.
---
> * got_illegal_poly - handle an illegal POLY[DFG] instruction.
360a398
> #ifndef GFLOAT
361a400,402
> #else GFLOAT
> case ACBG:
> #endif GFLOAT
364a406
> #ifndef GFLOAT
366d407
< case MNEGF:
368d408
< case MOVF:
369a410,416
> #else GFLOAT
> case MNEGG:
> case MOVG:
> case TSTG:
> #endif GFLOAT
> case MNEGF:
> case MOVF:
381c428
< * operand_type - is the operand a D or an F?
---
> * operand_type - is the operand a D, F or G?
391a439,441
> #ifdef GFLOAT
> if (opcode >= 0x40fd && opcode <= 0x56fd) return G;
> #endif GFLOAT
636a687
> #ifndef GFLOAT
638d688
< case ACBF: return "ACBF";
641,642d690
< case ADDF2: return "ADDF2";
< case ADDF3: return "ADDF3";
644d691
< case CMPF: return "CMPF";
646a694
> case CVTFD: return "CVTFD";
648a697,735
> case CVTRDL: return "CVTRDL";
> case DIVD2: return "DIVD2";
> case DIVD3: return "DIVD3";
> case EMODD: return "EMODD";
> case MNEGD: return "MNEGD";
> case MOVD: return "MOVD";
> case MULD2: return "MULD2";
> case MULD3: return "MULD3";
> case POLYD: return "POLYD";
> case SUBD2: return "SUBD2";
> case SUBD3: return "SUBD3";
> case TSTD: return "TSTD";
> #else GFLOAT
> case ACBG: return "ACBG";
> case ADDG2: return "ADDG2";
> case ADDG3: return "ADDG3";
> case CMPG: return "CMPG";
> case CVTGB: return "CVTGB";
> case CVTGF: return "CVTGF";
> case CVTFG: return "CVTFG";
> case CVTGL: return "CVTGL";
> case CVTGW: return "CVTGW";
> case CVTRGL: return "CVTRGL";
> case DIVG2: return "DIVG2";
> case DIVG3: return "DIVG3";
> case EMODG: return "EMODG";
> case MNEGG: return "MNEGG";
> case MOVG: return "MOVG";
> case MULG2: return "MULG2";
> case MULG3: return "MULG3";
> case POLYG: return "POLYG";
> case SUBG2: return "SUBG2";
> case SUBG3: return "SUBG3";
> case TSTG: return "TSTG";
> #endif GFLOAT
> case ACBF: return "ACBF";
> case ADDF2: return "ADDF2";
> case ADDF3: return "ADDF3";
> case CMPF: return "CMPF";
650d736
< case CVTFD: return "CVTFD";
653d738
< case CVTRDL: return "CVTRDL";
655,656d739
< case DIVD2: return "DIVD2";
< case DIVD3: return "DIVD3";
659d741
< case EMODD: return "EMODD";
661d742
< case MNEGD: return "MNEGD";
663d743
< case MOVD: return "MOVD";
665,666d744
< case MULD2: return "MULD2";
< case MULD3: return "MULD3";
669d746
< case POLYD: return "POLYD";
671,672d747
< case SUBD2: return "SUBD2";
< case SUBD3: return "SUBD3";
675d749
< case TSTD: return "TSTD";
SHAR_EOF
chmod +x 'trapov_.c.diff'
if test -f 'trpfpe_.c.diff'
then
echo shar: over-writing existing file "'trpfpe_.c.diff'"
fi
cat << \SHAR_EOF > 'trpfpe_.c.diff'
403c403,404
<
---
> /* This isn't going to work for G-format instructions because
> * they are 2 characters long */
405a407
> #ifndef GFLOAT
409a412,417
> #else GFLOAT
> case ADDG3:
> case DIVG3:
> case MULG3:
> case SUBG3:
> #endif GFLOAT
412a421
> #ifndef GFLOAT
418a428,435
> #else GFLOAT
> case ADDG2:
> case DIVG2:
> case MULG2:
> case SUBG2:
> case MNEGG:
> case MOVG:
> #endif GFLOAT
441a459
> #ifndef GFLOAT
442a461,463
> #else GFLOAT
> case CVTGF:
> #endif GFLOAT
447a469
> #ifndef GFLOAT
448a471,473
> #else GFLOAT
> case CVTFG:
> #endif GFLOAT
454a480
> #ifndef GFLOAT
455a482,484
> #else GFLOAT
> case EMODG:
> #endif GFLOAT
459a489
> #ifndef GFLOAT
460a491,493
> #else GFLOAT
> case POLYG:
> #endif GFLOAT
463a497
> #ifndef GFLOAT
464a499,501
> #else GFLOAT
> case ACBG:
> #endif GFLOAT
465a503
> #ifndef GFLOAT
466a505,507
> #else GFLOAT
> case CMPG:
> #endif GFLOAT
467a509
> #ifndef GFLOAT
468a511,513
> #else GFLOAT
> case TSTG:
> #endif GFLOAT
469a515
> #ifndef GFLOAT
472a519,523
> #else GFLOAT
> case CVTGB:
> case CVTGL:
> case CVTGW:
> #endif GFLOAT
475a527
> #ifndef GFLOAT
476a529,531
> #else GFLOAT
> case CVTRGL:
> #endif GFLOAT
SHAR_EOF
chmod +x 'trpfpe_.c.diff'
if test -f 'Makefile.diff'
then
echo shar: over-writing existing file "'Makefile.diff'"
fi
cat << \SHAR_EOF > 'Makefile.diff'
7c7
< CFLAGS = -O
---
> CFLAGS = -O -DGFLOAT
161c161
< OPTIONS = -DUCBVAX
---
> OPTIONS = -DUCBVAX -DGFLOAT
SHAR_EOF
chmod +x 'Makefile.diff'
if test -f 'pow_ri.c.diff'
then
echo shar: over-writing existing file "'pow_ri.c.diff'"
fi
cat << \SHAR_EOF > 'pow_ri.c.diff'
10a11,15
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> #endif GFLOAT
21a27
> #ifndef GFLOAT
22a29,32
> #else GFLOAT
> res.r[0] = pow;
> return(res.d);
> #endif GFLOAT
36a47
> #ifndef GFLOAT
37a49,52
> #else GFLOAT
> res.r[0] = pow;
> return(res.d);
> #endif GFLOAT
SHAR_EOF
chmod +x 'pow_ri.c.diff'
if test -f 'besj0_.c.diff'
then
echo shar: over-writing existing file "'besj0_.c.diff'"
fi
cat << \SHAR_EOF > 'besj0_.c.diff'
9a10,16
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = ((float)j0((double)*x));
> return( res.d );
> #else GFLOAT
10a18
> #endif GFLOAT
SHAR_EOF
chmod +x 'besj0_.c.diff'
if test -f 'besj1_.c.diff'
then
echo shar: over-writing existing file "'besj1_.c.diff'"
fi
cat << \SHAR_EOF > 'besj1_.c.diff'
9a10,16
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = ((float)j1((double)*x));
> return( res.d );
> #else GFLOAT
10a18
> #endif GFLOAT
SHAR_EOF
chmod +x 'besj1_.c.diff'
if test -f 'besjn_.c.diff'
then
echo shar: over-writing existing file "'besjn_.c.diff'"
fi
cat << \SHAR_EOF > 'besjn_.c.diff'
9a10,16
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = ((float)jn((int)*n, (double)*x));
> return( res.d );
> #else GFLOAT
10a18
> #endif GFLOAT
SHAR_EOF
chmod +x 'besjn_.c.diff'
if test -f 'besy0_.c.diff'
then
echo shar: over-writing existing file "'besy0_.c.diff'"
fi
cat << \SHAR_EOF > 'besy0_.c.diff'
9a10,16
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = ((float)y0((double)*x));
> return( res.d );
> #else GFLOAT
10a18
> #endif GFLOAT
SHAR_EOF
chmod +x 'besy0_.c.diff'
if test -f 'besy1_.c.diff'
then
echo shar: over-writing existing file "'besy1_.c.diff'"
fi
cat << \SHAR_EOF > 'besy1_.c.diff'
9a10,16
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = ((float)y1((double)*x));
> return( res.d );
> #else GFLOAT
10a18
> #endif GFLOAT
SHAR_EOF
chmod +x 'besy1_.c.diff'
if test -f 'besyn_.c.diff'
then
echo shar: over-writing existing file "'besyn_.c.diff'"
fi
cat << \SHAR_EOF > 'besyn_.c.diff'
9a10,16
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = ((float)yn((int)*n, (double)*x));
> return( res.d );
> #else GFLOAT
10a18
> #endif GFLOAT
SHAR_EOF
chmod +x 'besyn_.c.diff'
if test -f 'erf_.c.diff'
then
echo shar: over-writing existing file "'erf_.c.diff'"
fi
cat << \SHAR_EOF > 'erf_.c.diff'
9c9,15
<
---
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = erf(*x);
> return( res.d );
> #else GFLOAT
10a17
> #endif GFLOAT
SHAR_EOF
chmod +x 'erf_.c.diff'
if test -f 'erfc_.c.diff'
then
echo shar: over-writing existing file "'erfc_.c.diff'"
fi
cat << \SHAR_EOF > 'erfc_.c.diff'
9c9,15
<
---
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> res.r[0] = erfc(*x);
> return( res.d );
> #else GFLOAT
10a17
> #endif GFLOAT
SHAR_EOF
chmod +x 'erfc_.c.diff'
if test -f 'rand_.c.diff'
then
echo shar: over-writing existing file "'rand_.c.diff'"
fi
cat << \SHAR_EOF > 'rand_.c.diff'
42a43,47
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> #endif GFLOAT
43a49
> #ifndef GFLOAT
44a51,54
> #else GFLOAT
> res.r[0] = ( (float)(rand())/(float)RANDMAX );
> return( res.d );
> #endif GFLOAT
SHAR_EOF
chmod +x 'rand_.c.diff'
chdir ..
chdir ..
# End of shell archive
exit 0sources-request@panda.UUCP (11/11/85)
Mod.sources: Volume 3, Issue 38
Submitted by: J.D.Aplevich <decvax!watmath!watdcsu!aplevich>
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# gfloat
# This archive created: Tue Oct 29 20:29:25 1985
export PATH; PATH=/bin:$PATH
if test ! -d 'gfloat'
then
mkdir 'gfloat'
fi
cd 'gfloat'
if test ! -d 'f77'
then
mkdir 'f77'
fi
cd 'f77'
if test ! -d 'src'
then
mkdir 'src'
fi
cd 'src'
if test ! -d 'f1'
then
mkdir 'f1'
fi
cd 'f1'
if test -f 'local2.c.diff'
then
echo shar: over-writing existing file "'local2.c.diff'"
fi
cat << \SHAR_EOF > 'local2.c.diff'
*** ../f77/src/f1/local2.c.orig Tue Oct 29 15:16:24 1985
--- ../f77/src/f1/local2.c Tue Oct 29 15:21:37 1985
***************
*** 77,82
printf( "%s", q->opstring );
/* tbl
if( f == 'F' ) printf( "e" );
else if( f == 'D' ) printf( "d" );
tbl */
/* tbl */
--- 77,83 -----
printf( "%s", q->opstring );
/* tbl
if( f == 'F' ) printf( "e" );
+ #ifndef GFLOAT
else if( f == 'D' ) printf( "d" );
#else GFLOAT
else if( f == 'D' ) printf( "g" );
***************
*** 78,83
/* tbl
if( f == 'F' ) printf( "e" );
else if( f == 'D' ) printf( "d" );
tbl */
/* tbl */
switch( f ) {
--- 79,87 -----
if( f == 'F' ) printf( "e" );
#ifndef GFLOAT
else if( f == 'D' ) printf( "d" );
+ #else GFLOAT
+ else if( f == 'D' ) printf( "g" );
+ #endif GFLOAT
tbl */
/* tbl */
switch( f ) {
***************
*** 84,89
case 'L':
case 'W':
case 'B':
case 'D':
case 'F':
printf("%c", tolower(f));
--- 88,97 -----
case 'L':
case 'W':
case 'B':
+ #ifdef GFLOAT
+ printf("%c", tolower(f));
+ break;
+ #endif GFLOAT
case 'D':
#ifdef GFLOAT
printf("g");
***************
*** 85,90
case 'W':
case 'B':
case 'D':
case 'F':
printf("%c", tolower(f));
break;
--- 93,102 -----
break;
#endif GFLOAT
case 'D':
+ #ifdef GFLOAT
+ printf("g");
+ break;
+ #endif GFLOAT
case 'F':
printf("%c", tolower(f));
break;
***************
*** 143,148
tp = p->in.type;
tq = q->in.type;
return( (tp==FLOAT || tp==DOUBLE) !=
(tq==FLOAT || tq==DOUBLE) );
}
--- 155,161 -----
tp = p->in.type;
tq = q->in.type;
+ #ifndef GFLOAT
return( (tp==FLOAT || tp==DOUBLE) !=
(tq==FLOAT || tq==DOUBLE) );
#else GFLOAT
***************
*** 145,150
return( (tp==FLOAT || tp==DOUBLE) !=
(tq==FLOAT || tq==DOUBLE) );
}
prtype(n) NODE *n;
--- 158,167 -----
#ifndef GFLOAT
return( (tp==FLOAT || tp==DOUBLE) !=
(tq==FLOAT || tq==DOUBLE) );
+ #else GFLOAT
+ return( ((tp==FLOAT || tp==DOUBLE) != (tq==FLOAT || tq==DOUBLE)) ||
+ (tp==FLOAT && tq==DOUBLE) || (tp==DOUBLE && tq==FLOAT) );
+ #endif GFLOAT
}
prtype(n) NODE *n;
***************
*** 152,157
switch (n->in.type)
{
case DOUBLE:
printf("d");
return;
--- 169,175 -----
switch (n->in.type)
{
case DOUBLE:
+ #ifndef GFLOAT
printf("d");
#else GFLOAT
printf("g");
***************
*** 153,158
{
case DOUBLE:
printf("d");
return;
case FLOAT:
--- 171,179 -----
case DOUBLE:
#ifndef GFLOAT
printf("d");
+ #else GFLOAT
+ printf("g");
+ #endif GFLOAT
return;
case FLOAT:
***************
*** 386,391
if (xdebug) printf("->%d<-", ty);
if ( ty==DOUBLE) printf("d");
else if ( ty==FLOAT ) printf("f");
else printf("l");
--- 407,413 -----
if (xdebug) printf("->%d<-", ty);
+ #ifndef GFLOAT
if ( ty==DOUBLE) printf("d");
#else GFLOAT
if ( ty==DOUBLE) printf("g");
***************
*** 387,392
if (xdebug) printf("->%d<-", ty);
if ( ty==DOUBLE) printf("d");
else if ( ty==FLOAT ) printf("f");
else printf("l");
return;
--- 409,417 -----
#ifndef GFLOAT
if ( ty==DOUBLE) printf("d");
+ #else GFLOAT
+ if ( ty==DOUBLE) printf("g");
+ #endif GFLOAT
else if ( ty==FLOAT ) printf("f");
else printf("l");
return;
***************
*** 483,488
rmove( rt, rs, t ){
printf( " %s %s,%s\n",
(t==FLOAT ? "movf" : (t==DOUBLE ? "movd" : "movl")),
rnames[rs], rnames[rt] );
}
--- 508,514 -----
rmove( rt, rs, t ){
printf( " %s %s,%s\n",
+ #ifndef GFLOAT
(t==FLOAT ? "movf" : (t==DOUBLE ? "movd" : "movl")),
#else GFLOAT
(t==FLOAT ? "movf" : (t==DOUBLE ? "movg" : "movl")),
***************
*** 484,489
rmove( rt, rs, t ){
printf( " %s %s,%s\n",
(t==FLOAT ? "movf" : (t==DOUBLE ? "movd" : "movl")),
rnames[rs], rnames[rt] );
}
--- 510,518 -----
printf( " %s %s,%s\n",
#ifndef GFLOAT
(t==FLOAT ? "movf" : (t==DOUBLE ? "movd" : "movl")),
+ #else GFLOAT
+ (t==FLOAT ? "movf" : (t==DOUBLE ? "movg" : "movl")),
+ #endif GFLOAT
rnames[rs], rnames[rt] );
}
SHAR_EOF
chmod +x 'local2.c.diff'
if test -f 'otable.c.diff'
then
echo shar: over-writing existing file "'otable.c.diff'"
fi
cat << \SHAR_EOF > 'otable.c.diff'
*** ../f77/src/f1/otable.c.orig Tue Oct 29 15:16:27 1985
--- ../f77/src/f1/otable.c Tue Oct 29 15:21:44 1985
***************
*** 45,50
SAREG|AWD, TDOUBLE,
SANY, TFLOAT,
NAREG|NASL, RESC1|RESCC,
" cvtdf AL,A1\n",
SCONV, INTAREG|FORCC,
--- 45,51 -----
SAREG|AWD, TDOUBLE,
SANY, TFLOAT,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtdf AL,A1\n",
#else GFLOAT
" cvtgf AL,A1\n",
***************
*** 46,51
SANY, TFLOAT,
NAREG|NASL, RESC1|RESCC,
" cvtdf AL,A1\n",
SCONV, INTAREG|FORCC,
SAREG|AWD, ANYSIGNED|TUNSIGNED|TULONG|TFLOAT,
--- 47,55 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" cvtdf AL,A1\n",
+ #else GFLOAT
+ " cvtgf AL,A1\n",
+ #endif GFLOAT
SCONV, INTAREG|FORCC,
SAREG|AWD, ANYSIGNED|TUNSIGNED|TULONG|TFLOAT,
***************
*** 70,75
SAREG|AWD, TUCHAR|TUSHORT,
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" movzZLl AL,A1\n cvtld A1,A1\n",
SCONV, INTAREG|FORCC,
--- 74,80 -----
SAREG|AWD, TUCHAR|TUSHORT,
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" movzZLl AL,A1\n cvtld A1,A1\n",
#else GFLOAT
" movzZLl AL,A1\n cvtlg A1,A1\n",
***************
*** 71,76
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" movzZLl AL,A1\n cvtld A1,A1\n",
SCONV, INTAREG|FORCC,
SAREG|AWD, TFLOAT|TDOUBLE,
--- 76,84 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" movzZLl AL,A1\n cvtld A1,A1\n",
+ #else GFLOAT
+ " movzZLl AL,A1\n cvtlg A1,A1\n",
+ #endif GFLOAT
SCONV, INTAREG|FORCC,
SAREG|AWD, TFLOAT|TDOUBLE,
***************
*** 229,234
SAREG|AWD, TDOUBLE,
SAREG|AWD, TDOUBLE,
0, RESCC,
" cmpd AL,AR\nZP",
OPLOG, FORCC,
--- 237,243 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TDOUBLE,
0, RESCC,
+ #ifndef GFLOAT
" cmpd AL,AR\nZP",
#else GFLOAT
" cmpg AL,AR\nZP",
***************
*** 230,235
SAREG|AWD, TDOUBLE,
0, RESCC,
" cmpd AL,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TDOUBLE,
--- 239,247 -----
0, RESCC,
#ifndef GFLOAT
" cmpd AL,AR\nZP",
+ #else GFLOAT
+ " cmpg AL,AR\nZP",
+ #endif GFLOAT
OPLOG, FORCC,
SAREG|AWD, TDOUBLE,
***************
*** 235,240
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESCC,
" cvtfd AR,A1\n cmpd AL,A1\nZP",
OPLOG, FORCC,
--- 247,253 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESCC,
+ #ifndef GFLOAT
" cvtfd AR,A1\n cmpd AL,A1\nZP",
#else GFLOAT
" cvtfg AR,A1\n cmpg AL,A1\nZP",
***************
*** 236,241
SAREG|AWD, TFLOAT,
NAREG|NASR, RESCC,
" cvtfd AR,A1\n cmpd AL,A1\nZP",
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
--- 249,257 -----
NAREG|NASR, RESCC,
#ifndef GFLOAT
" cvtfd AR,A1\n cmpd AL,A1\nZP",
+ #else GFLOAT
+ " cvtfg AR,A1\n cmpg AL,A1\nZP",
+ #endif GFLOAT
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
***************
*** 241,246
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESCC,
" cvtfd AL,A1\n cmpd A1,AR\nZP",
OPLOG, FORCC,
--- 257,263 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESCC,
+ #ifndef GFLOAT
" cvtfd AL,A1\n cmpd A1,AR\nZP",
#else GFLOAT
" cvtfg AL,A1\n cmpg A1,AR\nZP",
***************
*** 242,247
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESCC,
" cvtfd AL,A1\n cmpd A1,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
--- 259,267 -----
NAREG|NASL, RESCC,
#ifndef GFLOAT
" cvtfd AL,A1\n cmpd A1,AR\nZP",
+ #else GFLOAT
+ " cvtfg AL,A1\n cmpg A1,AR\nZP",
+ #endif GFLOAT
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
***************
*** 260,265
SCON, TANY,
SANY, TFLOAT,
NAREG|NASL, RESC1,
" calls ZC,CL\n cvtdf r0,r0\n",
UNARY CALL, INTAREG,
--- 280,286 -----
SCON, TANY,
SANY, TFLOAT,
NAREG|NASL, RESC1,
+ #ifndef GFLOAT
" calls ZC,CL\n cvtdf r0,r0\n",
#else GFLOAT
" calls ZC,CL\n cvtgf r0,r0\n",
***************
*** 261,266
SANY, TFLOAT,
NAREG|NASL, RESC1,
" calls ZC,CL\n cvtdf r0,r0\n",
UNARY CALL, INTAREG,
SCON, TANY,
--- 282,290 -----
NAREG|NASL, RESC1,
#ifndef GFLOAT
" calls ZC,CL\n cvtdf r0,r0\n",
+ #else GFLOAT
+ " calls ZC,CL\n cvtgf r0,r0\n",
+ #endif GFLOAT
UNARY CALL, INTAREG,
SCON, TANY,
***************
*** 440,445
SANY, TANY,
SAREG, TDOUBLE,
2*NTEMP, RESC1,
" movd AR,A1\n",
REG, INTEMP,
--- 464,470 -----
SANY, TANY,
SAREG, TDOUBLE,
2*NTEMP, RESC1,
+ #ifndef GFLOAT
" movd AR,A1\n",
#else GFLOAT
" movg AR,A1\n",
***************
*** 441,446
SAREG, TDOUBLE,
2*NTEMP, RESC1,
" movd AR,A1\n",
REG, INTEMP,
SANY, TANY,
--- 466,474 -----
2*NTEMP, RESC1,
#ifndef GFLOAT
" movd AR,A1\n",
+ #else GFLOAT
+ " movg AR,A1\n",
+ #endif GFLOAT
REG, INTEMP,
SANY, TANY,
***************
*** 453,458
SANY, TANY,
SAREG, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
REG, FORARG,
--- 481,487 -----
SANY, TANY,
SAREG, TFLOAT,
0, RNULL,
+ #ifndef GFLOAT
" cvtfd AR,-(sp)\n",
#else GFLOAT
" cvtfg AR,-(sp)\n",
***************
*** 454,459
SAREG, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
REG, FORARG,
SANY, TANY,
--- 483,491 -----
0, RNULL,
#ifndef GFLOAT
" cvtfd AR,-(sp)\n",
+ #else GFLOAT
+ " cvtfg AR,-(sp)\n",
+ #endif GFLOAT
REG, FORARG,
SANY, TANY,
***************
*** 508,513
SANY, TANY,
SANY, TDOUBLE,
0, RNULL,
" movd AR,-(sp)\n",
OPLTYPE, FORARG,
--- 540,546 -----
SANY, TANY,
SANY, TDOUBLE,
0, RNULL,
+ #ifndef GFLOAT
" movd AR,-(sp)\n",
#else GFLOAT
" movg AR,-(sp)\n",
***************
*** 509,514
SANY, TDOUBLE,
0, RNULL,
" movd AR,-(sp)\n",
OPLTYPE, FORARG,
SANY, TANY,
--- 542,550 -----
0, RNULL,
#ifndef GFLOAT
" movd AR,-(sp)\n",
+ #else GFLOAT
+ " movg AR,-(sp)\n",
+ #endif GFLOAT
OPLTYPE, FORARG,
SANY, TANY,
***************
*** 514,519
SANY, TANY,
SANY, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
#ifdef FORT
--- 550,556 -----
SANY, TANY,
SANY, TFLOAT,
0, RNULL,
+ #ifndef GFLOAT
" cvtfd AR,-(sp)\n",
#else GFLOAT
" cvtfg AR,-(sp)\n",
***************
*** 515,520
SANY, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
#ifdef FORT
UNARY MINUS, INTAREG|FORCC,
--- 552,560 -----
0, RNULL,
#ifndef GFLOAT
" cvtfd AR,-(sp)\n",
+ #else GFLOAT
+ " cvtfg AR,-(sp)\n",
+ #endif GFLOAT
#ifdef FORT
UNARY MINUS, INTAREG|FORCC,
***************
*** 770,775
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG, RLEFT|RESCC,
" cvtfd AR,A1\n OD2 A1,AL\n",
ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
--- 810,816 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG, RLEFT|RESCC,
+ #ifndef GFLOAT
" cvtfd AR,A1\n OD2 A1,AL\n",
#else GFLOAT
" cvtfg AR,A1\n OD2 A1,AL\n",
***************
*** 771,776
SAREG|AWD, TFLOAT,
NAREG, RLEFT|RESCC,
" cvtfd AR,A1\n OD2 A1,AL\n",
ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
SAREG|AWD, TFLOAT,
--- 812,820 -----
NAREG, RLEFT|RESCC,
#ifndef GFLOAT
" cvtfd AR,A1\n OD2 A1,AL\n",
+ #else GFLOAT
+ " cvtfg AR,A1\n OD2 A1,AL\n",
+ #endif GFLOAT
ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
SAREG|AWD, TFLOAT,
***************
*** 776,781
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG, RLEFT|RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
OPFLOAT, INAREG|INTAREG|FORCC,
--- 820,826 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG, RLEFT|RESC1|RESCC,
+ #ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
#else GFLOAT
" cvtfg AL,A1\n OD2 AR,A1\n cvtgf A1,AL\n",
***************
*** 777,782
SAREG|AWD, TDOUBLE,
NAREG, RLEFT|RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
OPFLOAT, INAREG|INTAREG|FORCC,
STAREG, TDOUBLE,
--- 822,830 -----
NAREG, RLEFT|RESC1|RESCC,
#ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
+ #else GFLOAT
+ " cvtfg AL,A1\n OD2 AR,A1\n cvtgf A1,AL\n",
+ #endif GFLOAT
OPFLOAT, INAREG|INTAREG|FORCC,
STAREG, TDOUBLE,
***************
*** 794,799
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n",
OPFLOAT, INAREG|INTAREG|FORCC,
--- 842,848 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n",
#else GFLOAT
" cvtfg AL,A1\n OD2 AR,A1\n",
***************
*** 795,800
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n",
OPFLOAT, INAREG|INTAREG|FORCC,
SAREG|AWD, TDOUBLE,
--- 844,852 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n",
+ #else GFLOAT
+ " cvtfg AL,A1\n OD2 AR,A1\n",
+ #endif GFLOAT
OPFLOAT, INAREG|INTAREG|FORCC,
SAREG|AWD, TDOUBLE,
***************
*** 800,805
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESC1|RESCC,
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
#ifdef FORT
--- 852,858 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
#else GFLOAT
" cvtfg AR,A1\n OD3 A1,AL,A1\n",
***************
*** 801,806
SAREG|AWD, TFLOAT,
NAREG|NASR, RESC1|RESCC,
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
#ifdef FORT
OPFLOAT, INAREG|INTAREG|FORCC,
--- 854,862 -----
NAREG|NASR, RESC1|RESCC,
#ifndef GFLOAT
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
+ #else GFLOAT
+ " cvtfg AR,A1\n OD3 A1,AL,A1\n",
+ #endif GFLOAT
#ifdef FORT
OPFLOAT, INAREG|INTAREG|FORCC,
***************
*** 820,825
SAREG|AWD, TFLOAT,
SAREG|AWD, TFLOAT,
NAREG|NASL|NASR, RESC1|RESCC,
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
#endif
--- 876,882 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TFLOAT,
NAREG|NASL|NASR, RESC1|RESCC,
+ #ifndef GFLOAT
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
#else GFLOAT
" OF3 AR,AL,A1\n cvtfg A1,A1\n",
***************
*** 821,826
SAREG|AWD, TFLOAT,
NAREG|NASL|NASR, RESC1|RESCC,
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
#endif
/* Default actions for hard trees ... */
--- 878,886 -----
NAREG|NASL|NASR, RESC1|RESCC,
#ifndef GFLOAT
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
+ #else GFLOAT
+ " OF3 AR,AL,A1\n cvtfg A1,A1\n",
+ #endif GFLOAT
#endif
/* Default actions for hard trees ... */
SHAR_EOF
chmod +x 'otable.c.diff'
if test -f 'Makefile.diff'
then
echo shar: over-writing existing file "'Makefile.diff'"
fi
cat << \SHAR_EOF > 'Makefile.diff'
*** ../f77/src/f1/Makefile.orig Tue Oct 29 15:16:21 1985
--- ../f77/src/f1/Makefile Tue Oct 29 15:21:54 1985
***************
*** 2,8
#
CFLAGS = -O -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
! -I$M -I.
DEST = $(DESTROOT)/lib
--- 2,8 -----
#
CFLAGS = -O -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
! -DGFLOAT -I$M -I.
DEST = $(DESTROOT)/lib
SHAR_EOF
chmod +x 'Makefile.diff'
if test -f 'table.c.diff'
then
echo shar: over-writing existing file "'table.c.diff'"
fi
cat << \SHAR_EOF > 'table.c.diff'
*** ../f77/src/f1/table.c.orig Tue Oct 29 15:16:28 1985
--- ../f77/src/f1/table.c Tue Oct 29 15:21:50 1985
***************
*** 89,94
SAREG|AWD, TDOUBLE,
SANY, TFLOAT,
NAREG|NASL, RESC1|RESCC,
" cvtdf AL,A1\n",
SCONV, INTAREG|FORCC,
--- 89,95 -----
SAREG|AWD, TDOUBLE,
SANY, TFLOAT,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtdf AL,A1\n",
#else GFLOAT
" cvtgf AL,A1\n",
***************
*** 90,95
SANY, TFLOAT,
NAREG|NASL, RESC1|RESCC,
" cvtdf AL,A1\n",
SCONV, INTAREG|FORCC,
SAREG|AWD, ANYSIGNED|TUNSIGNED|TULONG|TFLOAT,
--- 91,99 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" cvtdf AL,A1\n",
+ #else GFLOAT
+ " cvtgf AL,A1\n",
+ #endif GFLOAT
SCONV, INTAREG|FORCC,
SAREG|AWD, ANYSIGNED|TUNSIGNED|TULONG|TFLOAT,
***************
*** 108,113
SAREG|AWD, ANYSIGNED|TUNSIGNED|TULONG|TFLOAT,
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" cvtZLd AL,A1\n",
SCONV, INTAREG|FORCC,
--- 112,118 -----
SAREG|AWD, ANYSIGNED|TUNSIGNED|TULONG|TFLOAT,
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtZLd AL,A1\n",
#else GFLOAT
" cvtZLg AL,A1\n",
***************
*** 109,114
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" cvtZLd AL,A1\n",
SCONV, INTAREG|FORCC,
SAREG|AWD, TUCHAR|TUSHORT,
--- 114,122 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" cvtZLd AL,A1\n",
+ #else GFLOAT
+ " cvtZLg AL,A1\n",
+ #endif GFLOAT
SCONV, INTAREG|FORCC,
SAREG|AWD, TUCHAR|TUSHORT,
***************
*** 114,119
SAREG|AWD, TUCHAR|TUSHORT,
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" movzZLl AL,A1\n cvtld A1,A1\n",
SCONV, INTAREG|FORCC,
--- 122,128 -----
SAREG|AWD, TUCHAR|TUSHORT,
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" movzZLl AL,A1\n cvtld A1,A1\n",
#else GFLOAT
" movzZLl AL,A1\n cvtlg A1,A1\n",
***************
*** 115,120
SANY, TFLOAT|TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" movzZLl AL,A1\n cvtld A1,A1\n",
SCONV, INTAREG|FORCC,
SAREG|AWD, TFLOAT|TDOUBLE,
--- 124,132 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" movzZLl AL,A1\n cvtld A1,A1\n",
+ #else GFLOAT
+ " movzZLl AL,A1\n cvtlg A1,A1\n",
+ #endif GFLOAT
SCONV, INTAREG|FORCC,
SAREG|AWD, TFLOAT|TDOUBLE,
***************
*** 273,278
SAREG|AWD, TDOUBLE,
SAREG|AWD, TDOUBLE,
0, RESCC,
" cmpd AL,AR\nZP",
OPLOG, FORCC,
--- 285,291 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TDOUBLE,
0, RESCC,
+ #ifndef GFLOAT
" cmpd AL,AR\nZP",
#else GFLOAT
" cmpg AL,AR\nZP",
***************
*** 274,279
SAREG|AWD, TDOUBLE,
0, RESCC,
" cmpd AL,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TDOUBLE,
--- 287,295 -----
0, RESCC,
#ifndef GFLOAT
" cmpd AL,AR\nZP",
+ #else GFLOAT
+ " cmpg AL,AR\nZP",
+ #endif GFLOAT
OPLOG, FORCC,
SAREG|AWD, TDOUBLE,
***************
*** 279,284
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESCC,
" cvtfd AR,A1\n cmpd AL,A1\nZP",
OPLOG, FORCC,
--- 295,301 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESCC,
+ #ifndef GFLOAT
" cvtfd AR,A1\n cmpd AL,A1\nZP",
#else GFLOAT
" cvtfg AR,A1\n cmpg AL,A1\nZP",
***************
*** 280,285
SAREG|AWD, TFLOAT,
NAREG|NASR, RESCC,
" cvtfd AR,A1\n cmpd AL,A1\nZP",
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
--- 297,305 -----
NAREG|NASR, RESCC,
#ifndef GFLOAT
" cvtfd AR,A1\n cmpd AL,A1\nZP",
+ #else GFLOAT
+ " cvtfg AR,A1\n cmpg AL,A1\nZP",
+ #endif GFLOAT
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
***************
*** 285,290
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESCC,
" cvtfd AL,A1\n cmpd A1,AR\nZP",
OPLOG, FORCC,
--- 305,311 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESCC,
+ #ifndef GFLOAT
" cvtfd AL,A1\n cmpd A1,AR\nZP",
#else GFLOAT
" cvtfg AL,A1\n cmpg A1,AR\nZP",
***************
*** 286,291
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESCC,
" cvtfd AL,A1\n cmpd A1,AR\nZP",
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
--- 307,315 -----
NAREG|NASL, RESCC,
#ifndef GFLOAT
" cvtfd AL,A1\n cmpd A1,AR\nZP",
+ #else GFLOAT
+ " cvtfg AL,A1\n cmpg A1,AR\nZP",
+ #endif GFLOAT
OPLOG, FORCC,
SAREG|AWD, TFLOAT,
***************
*** 484,489
SANY, TANY,
SAREG, TDOUBLE,
2*NTEMP, RESC1,
" movd AR,A1\n",
REG, INTEMP,
--- 508,514 -----
SANY, TANY,
SAREG, TDOUBLE,
2*NTEMP, RESC1,
+ #ifndef GFLOAT
" movd AR,A1\n",
#else GFLOAT
" movg AR,A1\n",
***************
*** 485,490
SAREG, TDOUBLE,
2*NTEMP, RESC1,
" movd AR,A1\n",
REG, INTEMP,
SANY, TANY,
--- 510,518 -----
2*NTEMP, RESC1,
#ifndef GFLOAT
" movd AR,A1\n",
+ #else GFLOAT
+ " movg AR,A1\n",
+ #endif GFLOAT
REG, INTEMP,
SANY, TANY,
***************
*** 497,502
SANY, TANY,
SAREG, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
REG, FORARG,
--- 525,531 -----
SANY, TANY,
SAREG, TFLOAT,
0, RNULL,
+ #ifndef GFLOAT
" cvtfd AR,-(sp)\n",
#else GFLOAT
" cvtfg AR,-(sp)\n",
***************
*** 498,503
SAREG, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
REG, FORARG,
SANY, TANY,
--- 527,535 -----
0, RNULL,
#ifndef GFLOAT
" cvtfd AR,-(sp)\n",
+ #else GFLOAT
+ " cvtfg AR,-(sp)\n",
+ #endif GFLOAT
REG, FORARG,
SANY, TANY,
***************
*** 552,557
SANY, TANY,
SANY, TDOUBLE,
0, RNULL,
" movd AR,-(sp)\n",
OPLTYPE, FORARG,
--- 584,590 -----
SANY, TANY,
SANY, TDOUBLE,
0, RNULL,
+ #ifndef GFLOAT
" movd AR,-(sp)\n",
#else GFLOAT
" movg AR,-(sp)\n",
***************
*** 553,558
SANY, TDOUBLE,
0, RNULL,
" movd AR,-(sp)\n",
OPLTYPE, FORARG,
SANY, TANY,
--- 586,594 -----
0, RNULL,
#ifndef GFLOAT
" movd AR,-(sp)\n",
+ #else GFLOAT
+ " movg AR,-(sp)\n",
+ #endif GFLOAT
OPLTYPE, FORARG,
SANY, TANY,
***************
*** 558,563
SANY, TANY,
SANY, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
#ifdef FORT
--- 594,600 -----
SANY, TANY,
SANY, TFLOAT,
0, RNULL,
+ #ifndef GFLOAT
" cvtfd AR,-(sp)\n",
#else GFLOAT
" cvtfg AR,-(sp)\n",
***************
*** 559,564
SANY, TFLOAT,
0, RNULL,
" cvtfd AR,-(sp)\n",
#ifdef FORT
UNARY MINUS, INTAREG|FORCC,
--- 596,604 -----
0, RNULL,
#ifndef GFLOAT
" cvtfd AR,-(sp)\n",
+ #else GFLOAT
+ " cvtfg AR,-(sp)\n",
+ #endif GFLOAT
#ifdef FORT
UNARY MINUS, INTAREG|FORCC,
***************
*** 814,819
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG, RLEFT|RESCC,
" cvtfd AR,A1\n OD2 A1,AL\n",
ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
--- 854,860 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG, RLEFT|RESCC,
+ #ifndef GFLOAT
" cvtfd AR,A1\n OD2 A1,AL\n",
#else GFLOAT
" cvtfg AR,A1\n OD2 A1,AL\n",
***************
*** 815,820
SAREG|AWD, TFLOAT,
NAREG, RLEFT|RESCC,
" cvtfd AR,A1\n OD2 A1,AL\n",
ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
SAREG|AWD, TFLOAT,
--- 856,864 -----
NAREG, RLEFT|RESCC,
#ifndef GFLOAT
" cvtfd AR,A1\n OD2 A1,AL\n",
+ #else GFLOAT
+ " cvtfg AR,A1\n OD2 A1,AL\n",
+ #endif GFLOAT
ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
SAREG|AWD, TFLOAT,
***************
*** 820,825
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG, RLEFT|RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
OPFLOAT, INAREG|INTAREG|FORCC,
--- 864,870 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG, RLEFT|RESC1|RESCC,
+ #ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
#else GFLOAT
" cvtfg AL,A1\n OD2 AR,A1\n cvtgf A1,AL\n",
***************
*** 821,826
SAREG|AWD, TDOUBLE,
NAREG, RLEFT|RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
OPFLOAT, INAREG|INTAREG|FORCC,
STAREG, TDOUBLE,
--- 866,874 -----
NAREG, RLEFT|RESC1|RESCC,
#ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
+ #else GFLOAT
+ " cvtfg AL,A1\n OD2 AR,A1\n cvtgf A1,AL\n",
+ #endif GFLOAT
OPFLOAT, INAREG|INTAREG|FORCC,
STAREG, TDOUBLE,
***************
*** 838,843
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n",
OPFLOAT, INAREG|INTAREG|FORCC,
--- 886,892 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n",
#else GFLOAT
" cvtfg AL,A1\n OD2 AR,A1\n",
***************
*** 839,844
SAREG|AWD, TDOUBLE,
NAREG|NASL, RESC1|RESCC,
" cvtfd AL,A1\n OD2 AR,A1\n",
OPFLOAT, INAREG|INTAREG|FORCC,
SAREG|AWD, TDOUBLE,
--- 888,896 -----
NAREG|NASL, RESC1|RESCC,
#ifndef GFLOAT
" cvtfd AL,A1\n OD2 AR,A1\n",
+ #else GFLOAT
+ " cvtfg AL,A1\n OD2 AR,A1\n",
+ #endif GFLOAT
OPFLOAT, INAREG|INTAREG|FORCC,
SAREG|AWD, TDOUBLE,
***************
*** 844,849
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESC1|RESCC,
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
#ifdef FORT
--- 896,902 -----
SAREG|AWD, TDOUBLE,
SAREG|AWD, TFLOAT,
NAREG|NASR, RESC1|RESCC,
+ #ifndef GFLOAT
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
#else GFLOAT
" cvtfg AR,A1\n OD3 A1,AL,A1\n",
***************
*** 845,850
SAREG|AWD, TFLOAT,
NAREG|NASR, RESC1|RESCC,
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
#ifdef FORT
OPFLOAT, INAREG|INTAREG|FORCC,
--- 898,906 -----
NAREG|NASR, RESC1|RESCC,
#ifndef GFLOAT
" cvtfd AR,A1\n OD3 A1,AL,A1\n",
+ #else GFLOAT
+ " cvtfg AR,A1\n OD3 A1,AL,A1\n",
+ #endif GFLOAT
#ifdef FORT
OPFLOAT, INAREG|INTAREG|FORCC,
***************
*** 864,869
SAREG|AWD, TFLOAT,
SAREG|AWD, TFLOAT,
NAREG|NASL|NASR, RESC1|RESCC,
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
#endif
--- 920,926 -----
SAREG|AWD, TFLOAT,
SAREG|AWD, TFLOAT,
NAREG|NASL|NASR, RESC1|RESCC,
+ #ifndef GFLOAT
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
#else GFLOAT
" OF3 AR,AL,A1\n cvtfg A1,A1\n",
***************
*** 865,870
SAREG|AWD, TFLOAT,
NAREG|NASL|NASR, RESC1|RESCC,
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
#endif
/* Default actions for hard trees ... */
--- 922,930 -----
NAREG|NASL|NASR, RESC1|RESCC,
#ifndef GFLOAT
" OF3 AR,AL,A1\n cvtfd A1,A1\n",
+ #else GFLOAT
+ " OF3 AR,AL,A1\n cvtfg A1,A1\n",
+ #endif GFLOAT
#endif
/* Default actions for hard trees ... */
SHAR_EOF
chmod +x 'table.c.diff'
chdir ..
if test ! -d 'f2'
then
mkdir 'f2'
fi
cd 'f2'
if test -f 'c22.c.diff'
then
echo shar: over-writing existing file "'c22.c.diff'"
fi
cat << \SHAR_EOF > 'c22.c.diff'
35a36
> #ifndef GFLOAT
36a38,40
> #else GFLOAT
> "acbg",T(ACB,DOUBLE),
> #endif GFLOAT
41a46
> #ifndef GFLOAT
43a49,52
> #else GFLOAT
> "addg2",T(ADD,U(DOUBLE,OP2)),
> "addg3",T(ADD,U(DOUBLE,OP3)),
> #endif GFLOAT
102a112
> #ifndef GFLOAT
103a114,116
> #else GFLOAT
> "clrg",T(CLR,DOUBLE),
> #endif GFLOAT
108a122
> #ifndef GFLOAT
109a124,126
> #else GFLOAT
> "cmpg",T(CMP,DOUBLE),
> #endif GFLOAT
112a130
> #ifndef GFLOAT
113a132,134
> #else GFLOAT
> "cvtbg",T(CVT,U(BYTE,DOUBLE)),
> #endif GFLOAT
116a138
> #ifndef GFLOAT
120a143,148
> #else GFLOAT
> "cvtgb",T(CVT,U(DOUBLE,BYTE)),
> "cvtgf",T(CVT,U(DOUBLE,FLOAT)),
> "cvtgl",T(CVT,U(DOUBLE,LONG)),
> "cvtgw",T(CVT,U(DOUBLE,WORD)),
> #endif GFLOAT
121a150
> #ifndef GFLOAT
122a152,154
> #else GFLOAT
> "cvtfg",T(CVT,U(FLOAT,DOUBLE)),
> #endif GFLOAT
125a158
> #ifndef GFLOAT
126a160,162
> #else GFLOAT
> "cvtlg",T(CVT,U(LONG,DOUBLE)),
> #endif GFLOAT
128a165
> #ifndef GFLOAT
129a167,169
> #else GFLOAT
> "cvtrgl",T(CVT,U(DOUBLE,LONG)),
> #endif GFLOAT
131a172
> #ifndef GFLOAT
132a174,176
> #else GFLOAT
> "cvtwg",T(CVT,U(WORD,DOUBLE)),
> #endif GFLOAT
139a184
> #ifndef GFLOAT
141a187,190
> #else GFLOAT
> "divg2",T(DIV,U(DOUBLE,OP2)),
> "divg3",T(DIV,U(DOUBLE,OP3)),
> #endif GFLOAT
158a208
> #ifndef GFLOAT
159a210,212
> #else GFLOAT
> "mnegg",T(NEG,DOUBLE),
> #endif GFLOAT
163a217
> #ifndef GFLOAT
164a219,221
> #else GFLOAT
> "movag",T(MOVA,DOUBLE),
> #endif GFLOAT
169a227
> #ifndef GFLOAT
170a229,231
> #else GFLOAT
> "movg",T(MOV,DOUBLE),
> #endif GFLOAT
179a241
> #ifndef GFLOAT
181a244,247
> #else GFLOAT
> "mulg2",T(MUL,U(DOUBLE,OP2)),
> "mulg3",T(MUL,U(DOUBLE,OP3)),
> #endif GFLOAT
188a255
> #ifndef GFLOAT
189a257,259
> #else GFLOAT
> "pushag",T(PUSHA,DOUBLE),
> #endif GFLOAT
199a270
> #ifndef GFLOAT
201a273,276
> #else GFLOAT
> "subg2",T(SUB,U(DOUBLE,OP2)),
> "subg3",T(SUB,U(DOUBLE,OP3)),
> #endif GFLOAT
208a284
> #ifndef GFLOAT
209a286,288
> #else GFLOAT
> "tstg",T(TST,DOUBLE),
> #endif GFLOAT
266a346
> #ifndef GFLOAT
267a348,350
> #else GFLOAT
> "emodg",0,
> #endif GFLOAT
284a368
> #ifndef GFLOAT
285a370,372
> #else GFLOAT
> "polyg",0,
> #endif GFLOAT
SHAR_EOF
chmod +x 'c22.c.diff'
if test -f 'Makefile.diff'
then
echo shar: over-writing existing file "'Makefile.diff'"
fi
cat << \SHAR_EOF > 'Makefile.diff'
4c4
< CFLAGS = -w -DCOPYCODE
---
> CFLAGS = -w -DCOPYCODE -DGFLOAT
SHAR_EOF
chmod +x 'Makefile.diff'
chdir ..
chdir ..
chdir ..
chdir ..
# End of shell archive
exit 0sources-request@panda.UUCP (11/11/85)
Mod.sources: Volume 3, Issue 39 Submitted by: J.D.Aplevich <decvax!watmath!watdcsu!aplevich> #!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # gfloat # This archive created: Wed Oct 30 10:33:37 1985 export PATH; PATH=/bin:$PATH if test ! -d 'gfloat' then mkdir 'gfloat' fi cd 'gfloat' if test ! -d 'f77' then mkdir 'f77' fi cd 'f77' if test ! -d 'src' then mkdir 'src' fi cd 'src' if test ! -d 'f77pass1' then mkdir 'f77pass1' fi cd 'f77pass1' if test -f 'bb.c.diff' then echo shar: over-writing existing file "'bb.c.diff'" fi cat << \SHAR_EOF > 'bb.c.diff' *** ../f77/src/f77pass1/bb.c.orig Tue Oct 29 15:15:44 1985 --- ../f77/src/f77pass1/bb.c Tue Oct 29 15:22:15 1985 *************** *** 717,722 } else if( ISINT(type) ) fprintf(diagfile," ci= %d\n",p->constblock.const.ci); else if( ISREAL(type) ) fprintf(diagfile," cd[0]= %e\n",p->constblock.const.cd[0]); else fprintf(diagfile," cd[0]= %e cd[1]= %e\n", --- 717,726 ----- } else if( ISINT(type) ) fprintf(diagfile," ci= %d\n",p->constblock.const.ci); + #ifdef GFLOAT + else if( ISREAL(type) && type==TYREAL) + fprintf(diagfile," cr[0]= %e\n",p->constblock.const.cr[0]); + #endif GFLOAT else if( ISREAL(type) ) fprintf(diagfile," cd[0]= %e\n",p->constblock.const.cd[0]); else fprintf(diagfile," cd[0]= %e cd[1]= %e\n", SHAR_EOF chmod +x 'bb.c.diff' if test -f 'conv.c.diff' then echo shar: over-writing existing file "'conv.c.diff'" fi cat << \SHAR_EOF > 'conv.c.diff' *** ../f77/src/f77pass1/conv.c.orig Tue Oct 29 15:15:46 1985 --- ../f77/src/f77pass1/conv.c Tue Oct 29 15:22:23 1985 *************** *** 53,59 /* The following constants are used to check the limits of */ ! /* conversions. Dmaxword is the largest double precision */ /* number which can be converted to a two-byte integer */ /* without overflow. Dminword is the smallest double */ /* precision value which can be converted to a two-byte */ --- 53,61 ----- /* The following constants are used to check the limits of */ ! /* conversions. */ ! ! /* Dmaxword is the largest double precision */ /* number which can be converted to a two-byte integer */ /* without overflow. Dminword is the smallest double */ /* precision value which can be converted to a two-byte */ *************** *** 57,66 /* number which can be converted to a two-byte integer */ /* without overflow. Dminword is the smallest double */ /* precision value which can be converted to a two-byte */ ! /* integer without overflow. Dmaxint and dminint are the */ ! /* analogous values for four-byte integers. */ ! ! LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff }; LOCAL long dminword[] = { 0x00ffc800, 0xffffffff }; --- 59,66 ----- /* number which can be converted to a two-byte integer */ /* without overflow. Dminword is the smallest double */ /* precision value which can be converted to a two-byte */ ! /* integer without overflow. */ ! #ifndef GFLOAT LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff }; LOCAL long dminword[] = { 0x00ffc800, 0xffffffff }; #else GFLOAT *************** *** 63,68 LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff }; LOCAL long dminword[] = { 0x00ffc800, 0xffffffff }; LOCAL long dmaxint[] = { 0xffff4fff, 0xfffffeff }; LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; --- 63,72 ----- #ifndef GFLOAT LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff }; LOCAL long dminword[] = { 0x00ffc800, 0xffffffff }; + #else GFLOAT + LOCAL long dmaxword[] = { 0xffdf40ff, 0xffffffff }; + LOCAL long dminword[] = { 0x0010c100, 0x00000000 }; + #endif GFLOAT /* Dmaxint and dminint are the limits for double values */ /* converted to four-byte integers. */ *************** *** 64,69 LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff }; LOCAL long dminword[] = { 0x00ffc800, 0xffffffff }; LOCAL long dmaxint[] = { 0xffff4fff, 0xfffffeff }; LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; --- 68,79 ----- LOCAL long dminword[] = { 0x0010c100, 0x00000000 }; #endif GFLOAT + /* Dmaxint and dminint are the limits for double values */ + /* converted to four-byte integers. */ + #ifdef GFLOAT + LOCAL long dmaxint[] = { 0xffff41ff, 0xffffffdf }; + LOCAL long dminint[] = { 0x0000c200, 0xffff0010 }; + #else GFLOAT LOCAL long dmaxint[] = { 0xffff4fff, 0xfffffeff }; LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; #endif GFLOAT *************** *** 66,71 LOCAL long dmaxint[] = { 0xffff4fff, 0xfffffeff }; LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff }; --- 76,82 ----- #else GFLOAT LOCAL long dmaxint[] = { 0xffff4fff, 0xfffffeff }; LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; + #endif GFLOAT #ifndef GFLOAT LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; *************** *** 67,72 LOCAL long dmaxint[] = { 0xffff4fff, 0xfffffeff }; LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff }; --- 78,84 ----- LOCAL long dminint[] = { 0x0000d000, 0xffff00ff }; #endif GFLOAT + #ifndef GFLOAT LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff }; #else GFLOAT *************** *** 69,74 LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff }; --- 81,89 ----- #ifndef GFLOAT LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff }; + #else GFLOAT + LOCAL long dmaxreal[] = { 0xffff47f7, 0xffffffff }; + LOCAL long dminreal[] = { 0xffffc7f7, 0xffffffff }; /* Fmaxword and fminword are limits for float to short. */ LOCAL long fmaxword[] = { 0xff7f47ff }; *************** *** 70,75 LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff }; LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff }; /* The routines which follow are used to convert */ --- 85,98 ----- LOCAL long dmaxreal[] = { 0xffff47f7, 0xffffffff }; LOCAL long dminreal[] = { 0xffffc7f7, 0xffffffff }; + /* Fmaxword and fminword are limits for float to short. */ + LOCAL long fmaxword[] = { 0xff7f47ff }; + LOCAL long fminword[] = { 0x00ffc800 }; + + /* Fmaxint and fminint are the limits for float to int. */ + LOCAL long fmaxint[] = { 0xffff4fff }; + LOCAL long fminint[] = { 0x0000d000 }; + #endif GFLOAT /* The routines which follow are used to convert */ *************** *** 188,193 register long *rp; register double *minp; register double *maxp; realvalue x; switch (cp->vtype) --- 211,220 ----- register long *rp; register double *minp; register double *maxp; + #ifdef GFLOAT + register float *minpf; + register float *maxpf; + #endif GFLOAT realvalue x; switch (cp->vtype) *************** *** 222,227 break; case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: --- 249,255 ----- break; case TYREAL: + #ifndef GFLOAT case TYDREAL: #endif GFLOAT case TYCOMPLEX: *************** *** 223,228 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: minp = (double *) dminword; --- 251,257 ----- case TYREAL: #ifndef GFLOAT case TYDREAL: + #endif GFLOAT case TYCOMPLEX: #ifdef GFLOAT minpf = (float *) fminword; *************** *** 224,229 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: minp = (double *) dminword; maxp = (double *) dmaxword; --- 253,290 ----- case TYDREAL: #endif GFLOAT case TYCOMPLEX: + #ifdef GFLOAT + minpf = (float *) fminword; + maxpf = (float *) fmaxword; + rp = (long *) &(cp->const.cr[0]); + x.q.word1 = rp[0]; + if (x.f.sign == 1 && x.f.exp == 0) + { + if (badvalue <= 1) + { + badvalue = 2; + err(reserved); + } + p = errnode(); + } + else if ((float) x.q.word1 >= *minpf && (float) x.q.word1 <= *maxpf) + { + p = (expptr) mkconst(TYSHORT); + p->constblock.const.ci = x.q.word1; + } + else + { + if (badvalue <= 1) + { + badvalue = 2; + err(toobig); + } + p = errnode(); + } + break; + + case TYDREAL: + #endif GFLOAT case TYDCOMPLEX: minp = (double *) dminword; maxp = (double *) dmaxword; *************** *** 230,235 rp = (long *) &(cp->const.cd[0]); x.q.word1 = rp[0]; x.q.word2 = rp[1]; if (x.f.sign == 1 && x.f.exp == 0) { if (badvalue <= 1) --- 291,297 ----- rp = (long *) &(cp->const.cd[0]); x.q.word1 = rp[0]; x.q.word2 = rp[1]; + #ifndef GFLOAT if (x.f.sign == 1 && x.f.exp == 0) #else GFLOAT if (x.g.sign == 1 && x.g.exp == 0) *************** *** 231,236 x.q.word1 = rp[0]; x.q.word2 = rp[1]; if (x.f.sign == 1 && x.f.exp == 0) { if (badvalue <= 1) { --- 293,301 ----- x.q.word2 = rp[1]; #ifndef GFLOAT if (x.f.sign == 1 && x.f.exp == 0) + #else GFLOAT + if (x.g.sign == 1 && x.g.exp == 0) + #endif GFLOAT { if (badvalue <= 1) { *************** *** 302,307 register long *rp; register double *minp; register double *maxp; realvalue x; switch (cp->vtype) --- 367,376 ----- register long *rp; register double *minp; register double *maxp; + #ifdef GFLOAT + register float *minpf; + register float *maxpf; + #endif GFLOAT realvalue x; switch (cp->vtype) *************** *** 323,328 break; case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: --- 392,398 ----- break; case TYREAL: + #ifndef GFLOAT case TYDREAL: #endif GFLOAT case TYCOMPLEX: *************** *** 324,329 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: minp = (double *) dminint; --- 394,400 ----- case TYREAL: #ifndef GFLOAT case TYDREAL: + #endif GFLOAT case TYCOMPLEX: #ifdef GFLOAT minpf = (float *) fminint; *************** *** 325,330 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: minp = (double *) dminint; maxp = (double *) dmaxint; --- 396,432 ----- case TYDREAL: #endif GFLOAT case TYCOMPLEX: + #ifdef GFLOAT + minpf = (float *) fminint; + maxpf = (float *) fmaxint; + x.q.word1 = *((long *) &cp->const.cr[0]); + if (x.f.sign == 1 && x.f.exp == 0) + { + if (badvalue <= 1) + { + badvalue = 2; + err(reserved); + } + p = errnode(); + } + else if (cp->const.cr[0] >= *minpf && cp->const.cr[0] <= *maxpf) + { + p = (expptr) mkconst(TYLONG); + p->constblock.const.ci = cp->const.cr[0]; + } + else + { + if (badvalue <= 1) + { + badvalue = 2; + err(toobig); + } + p = errnode(); + } + break; + + case TYDREAL: + #endif GFLOAT case TYDCOMPLEX: minp = (double *) dminint; maxp = (double *) dmaxint; *************** *** 331,336 rp = (long *) &(cp->const.cd[0]); x.q.word1 = rp[0]; x.q.word2 = rp[1]; if (x.f.sign == 1 && x.f.exp == 0) { if (badvalue <= 1) --- 433,439 ----- rp = (long *) &(cp->const.cd[0]); x.q.word1 = rp[0]; x.q.word2 = rp[1]; + #ifndef GFLOAT if (x.f.sign == 1 && x.f.exp == 0) #else GFLOAT if (x.g.sign == 1 && x.g.exp == 0) *************** *** 332,337 x.q.word1 = rp[0]; x.q.word2 = rp[1]; if (x.f.sign == 1 && x.f.exp == 0) { if (badvalue <= 1) { --- 435,443 ----- x.q.word2 = rp[1]; #ifndef GFLOAT if (x.f.sign == 1 && x.f.exp == 0) + #else GFLOAT + if (x.g.sign == 1 && x.g.exp == 0) + #endif GFLOAT { if (badvalue <= 1) { *************** *** 403,408 register double *minp; register double *maxp; realvalue x; float y; switch (cp->vtype) --- 509,515 ----- register double *minp; register double *maxp; realvalue x; + #ifndef GFLOAT float y; #endif GFLOAT *************** *** 404,409 register double *maxp; realvalue x; float y; switch (cp->vtype) { --- 511,517 ----- realvalue x; #ifndef GFLOAT float y; + #endif GFLOAT switch (cp->vtype) { *************** *** 418,423 case TYSHORT: case TYLONG: p = (expptr) mkconst(TYREAL); p->constblock.const.cd[0] = cp->const.ci; break; --- 526,532 ----- case TYSHORT: case TYLONG: p = (expptr) mkconst(TYREAL); + #ifndef GFLOAT p->constblock.const.cd[0] = cp->const.ci; #else GFLOAT p->constblock.const.cr[0] = cp->const.ci; *************** *** 419,424 case TYLONG: p = (expptr) mkconst(TYREAL); p->constblock.const.cd[0] = cp->const.ci; break; case TYREAL: --- 528,536 ----- p = (expptr) mkconst(TYREAL); #ifndef GFLOAT p->constblock.const.cd[0] = cp->const.ci; + #else GFLOAT + p->constblock.const.cr[0] = cp->const.ci; + #endif GFLOAT break; case TYREAL: *************** *** 422,427 break; case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: --- 534,540 ----- break; case TYREAL: + #ifndef GFLOAT case TYDREAL: #endif GFLOAT case TYCOMPLEX: *************** *** 423,428 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: minp = (double *) dminreal; --- 536,542 ----- case TYREAL: #ifndef GFLOAT case TYDREAL: + #endif GFLOAT case TYCOMPLEX: #ifdef GFLOAT p = (expptr) mkconst(TYREAL); *************** *** 424,429 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: minp = (double *) dminreal; maxp = (double *) dmaxreal; --- 538,550 ----- case TYDREAL: #endif GFLOAT case TYCOMPLEX: + #ifdef GFLOAT + p = (expptr) mkconst(TYREAL); + p->constblock.const.cr[0] = cp->const.cr[0]; + break; + + case TYDREAL: + #endif GFLOAT case TYDCOMPLEX: minp = (double *) dminreal; maxp = (double *) dmaxreal; *************** *** 430,435 rp = (long *) &(cp->const.cd[0]); x.q.word1 = rp[0]; x.q.word2 = rp[1]; if (x.f.sign == 1 && x.f.exp == 0) { p = (expptr) mkconst(TYREAL); --- 551,557 ----- rp = (long *) &(cp->const.cd[0]); x.q.word1 = rp[0]; x.q.word2 = rp[1]; + #ifndef GFLOAT if (x.f.sign == 1 && x.f.exp == 0) #else GFLOAT if (x.g.sign == 1 && x.g.exp == 0) *************** *** 431,436 x.q.word1 = rp[0]; x.q.word2 = rp[1]; if (x.f.sign == 1 && x.f.exp == 0) { p = (expptr) mkconst(TYREAL); rp = (long *) &(p->constblock.const.cd[0]); --- 553,561 ----- x.q.word2 = rp[1]; #ifndef GFLOAT if (x.f.sign == 1 && x.f.exp == 0) + #else GFLOAT + if (x.g.sign == 1 && x.g.exp == 0) + #endif GFLOAT { p = (expptr) mkconst(TYREAL); #ifndef GFLOAT *************** *** 433,438 if (x.f.sign == 1 && x.f.exp == 0) { p = (expptr) mkconst(TYREAL); rp = (long *) &(p->constblock.const.cd[0]); rp[0] = x.q.word1; } --- 558,564 ----- #endif GFLOAT { p = (expptr) mkconst(TYREAL); + #ifndef GFLOAT rp = (long *) &(p->constblock.const.cd[0]); rp[0] = x.q.word1; #else GFLOAT *************** *** 435,440 p = (expptr) mkconst(TYREAL); rp = (long *) &(p->constblock.const.cd[0]); rp[0] = x.q.word1; } else if (x.d >= *minp && x.d <= *maxp) { --- 561,570 ----- #ifndef GFLOAT rp = (long *) &(p->constblock.const.cd[0]); rp[0] = x.q.word1; + #else GFLOAT + /* Gfloat: Assume that IEEE standard hardware handles exceptions */ + p->constblock.const.cr[0] = x.d; + #endif GFLOAT } else if (x.d >= *minp && x.d <= *maxp) { *************** *** 439,444 else if (x.d >= *minp && x.d <= *maxp) { p = (expptr) mkconst(TYREAL); y = x.d; p->constblock.const.cd[0] = y; } --- 569,575 ----- else if (x.d >= *minp && x.d <= *maxp) { p = (expptr) mkconst(TYREAL); + #ifndef GFLOAT y = x.d; p->constblock.const.cd[0] = y; #else GFLOAT *************** *** 441,446 p = (expptr) mkconst(TYREAL); y = x.d; p->constblock.const.cd[0] = y; } else { --- 572,580 ----- #ifndef GFLOAT y = x.d; p->constblock.const.cd[0] = y; + #else GFLOAT + p->constblock.const.cr[0] = x.d; + #endif GFLOAT } else { *************** *** 517,522 p->constblock.const.cd[0] = cp->const.ci; break; case TYREAL: case TYDREAL: case TYCOMPLEX: --- 651,657 ----- p->constblock.const.cd[0] = cp->const.ci; break; + #ifndef GFLOAT case TYREAL: case TYCOMPLEX: #endif GFLOAT *************** *** 518,524 break; case TYREAL: - case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: p = (expptr) mkconst(TYDREAL); --- 653,658 ----- #ifndef GFLOAT case TYREAL: case TYCOMPLEX: #endif GFLOAT case TYDREAL: *************** *** 520,525 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: p = (expptr) mkconst(TYDREAL); longp = (long *) &(cp->const.cd[0]); --- 654,661 ----- #ifndef GFLOAT case TYREAL: case TYCOMPLEX: + #endif GFLOAT + case TYDREAL: case TYDCOMPLEX: p = (expptr) mkconst(TYDREAL); #ifndef GFLOAT *************** *** 522,527 case TYCOMPLEX: case TYDCOMPLEX: p = (expptr) mkconst(TYDREAL); longp = (long *) &(cp->const.cd[0]); rp = (long *) &(p->constblock.const.cd[0]); rp[0] = longp[0]; --- 658,664 ----- case TYDREAL: case TYDCOMPLEX: p = (expptr) mkconst(TYDREAL); + #ifndef GFLOAT longp = (long *) &(cp->const.cd[0]); rp = (long *) &(p->constblock.const.cd[0]); rp[0] = longp[0]; *************** *** 526,531 rp = (long *) &(p->constblock.const.cd[0]); rp[0] = longp[0]; rp[1] = longp[1]; break; case TYLOGICAL: --- 663,671 ----- rp = (long *) &(p->constblock.const.cd[0]); rp[0] = longp[0]; rp[1] = longp[1]; + #else GFLOAT + p->constblock.const.cd[0] = cp->const.cd[0]; + #endif GFLOAT break; #ifdef GFLOAT *************** *** 528,533 rp[1] = longp[1]; break; case TYLOGICAL: if (badvalue <= 1) { --- 668,681 ----- #endif GFLOAT break; + #ifdef GFLOAT + case TYREAL: + case TYCOMPLEX: + p = (expptr) mkconst(TYDREAL); + p->constblock.const.cd[0] = cp->const.cr[0]; + break; + + #endif GFLOAT case TYLOGICAL: if (badvalue <= 1) { *************** *** 576,581 register long *rp; register double *minp; register double *maxp; realvalue re, im; int overflow; float x; --- 724,733 ----- register long *rp; register double *minp; register double *maxp; + #ifdef GFLOAT + register float *minpf; + register float *maxpf; + #endif GFLOAT realvalue re, im; int overflow; float x; *************** *** 598,603 break; case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: --- 750,756 ----- break; case TYREAL: + #ifndef GFLOAT case TYDREAL: #endif GFLOAT case TYCOMPLEX: *************** *** 599,604 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: overflow = 0; --- 752,758 ----- case TYREAL: #ifndef GFLOAT case TYDREAL: + #endif GFLOAT case TYCOMPLEX: #ifdef GFLOAT overflow = 0; *************** *** 600,605 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: overflow = 0; minp = (double *) dminreal; --- 754,768 ----- case TYDREAL: #endif GFLOAT case TYCOMPLEX: + #ifdef GFLOAT + overflow = 0; + p = (expptr) mkconst(TYCOMPLEX); + p->constblock.const.cr[0] = cp->const.cr[0]; + p->constblock.const.cr[1] = cp->const.cr[1]; + break; + + case TYDREAL: + #endif GFLOAT case TYDCOMPLEX: overflow = 0; minp = (double *) dminreal; *************** *** 609,614 re.q.word2 = rp[1]; im.q.word1 = rp[2]; im.q.word2 = rp[3]; if (((re.f.sign == 0 || re.f.exp != 0) && (re.d < *minp || re.d > *maxp)) || ((im.f.sign == 0 || re.f.exp != 0) && --- 772,778 ----- re.q.word2 = rp[1]; im.q.word1 = rp[2]; im.q.word2 = rp[3]; + #ifndef GFLOAT if (((re.f.sign == 0 || re.f.exp != 0) && #else GFLOAT if (((re.g.sign == 0 || re.g.exp != 0) && *************** *** 610,615 im.q.word1 = rp[2]; im.q.word2 = rp[3]; if (((re.f.sign == 0 || re.f.exp != 0) && (re.d < *minp || re.d > *maxp)) || ((im.f.sign == 0 || re.f.exp != 0) && (im.d < *minp || re.d > *maxp))) --- 774,782 ----- im.q.word2 = rp[3]; #ifndef GFLOAT if (((re.f.sign == 0 || re.f.exp != 0) && + #else GFLOAT + if (((re.g.sign == 0 || re.g.exp != 0) && + #endif GFLOAT (re.d < *minp || re.d > *maxp)) || #ifndef GFLOAT ((im.f.sign == 0 || re.f.exp != 0) && *************** *** 611,616 im.q.word2 = rp[3]; if (((re.f.sign == 0 || re.f.exp != 0) && (re.d < *minp || re.d > *maxp)) || ((im.f.sign == 0 || re.f.exp != 0) && (im.d < *minp || re.d > *maxp))) { --- 778,784 ----- if (((re.g.sign == 0 || re.g.exp != 0) && #endif GFLOAT (re.d < *minp || re.d > *maxp)) || + #ifndef GFLOAT ((im.f.sign == 0 || re.f.exp != 0) && #else GFLOAT ((im.g.sign == 0 || re.g.exp != 0) && *************** *** 612,617 if (((re.f.sign == 0 || re.f.exp != 0) && (re.d < *minp || re.d > *maxp)) || ((im.f.sign == 0 || re.f.exp != 0) && (im.d < *minp || re.d > *maxp))) { if (badvalue <= 1) --- 780,788 ----- (re.d < *minp || re.d > *maxp)) || #ifndef GFLOAT ((im.f.sign == 0 || re.f.exp != 0) && + #else GFLOAT + ((im.g.sign == 0 || re.g.exp != 0) && + #endif GFLOAT (im.d < *minp || re.d > *maxp))) { if (badvalue <= 1) *************** *** 624,629 else { p = (expptr) mkconst(TYCOMPLEX); if (re.f.sign == 1 && re.f.exp == 0) re.q.word2 = 0; else --- 795,801 ----- else { p = (expptr) mkconst(TYCOMPLEX); + #ifndef GFLOAT if (re.f.sign == 1 && re.f.exp == 0) re.q.word2 = 0; else *************** *** 643,648 rp[1] = re.q.word2; rp[2] = im.q.word1; rp[3] = im.q.word2; } break; --- 815,824 ----- rp[1] = re.q.word2; rp[2] = im.q.word1; rp[3] = im.q.word2; + #else GFLOAT + p->constblock.const.cr[0] = cp->const.cd[0]; + p->constblock.const.cr[0] = cp->const.cd[1]; + #endif GFLOAT } break; *************** *** 711,716 break; case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: --- 887,893 ----- break; case TYREAL: + #ifndef GFLOAT case TYDREAL: #endif GFLOAT case TYCOMPLEX: *************** *** 712,717 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: p = (expptr) mkconst(TYDCOMPLEX); --- 889,895 ----- case TYREAL: #ifndef GFLOAT case TYDREAL: + #endif GFLOAT case TYCOMPLEX: #ifdef GFLOAT p = (expptr) mkconst(TYDCOMPLEX); *************** *** 713,718 case TYREAL: case TYDREAL: case TYCOMPLEX: case TYDCOMPLEX: p = (expptr) mkconst(TYDCOMPLEX); longp = (long *) &(cp->const.cd[0]); --- 891,904 ----- case TYDREAL: #endif GFLOAT case TYCOMPLEX: + #ifdef GFLOAT + p = (expptr) mkconst(TYDCOMPLEX); + p->constblock.const.cd[0] = cp->const.cr[0]; + p->constblock.const.cd[1] = cp->const.cr[1]; + break; + + case TYDREAL: + #endif GFLOAT case TYDCOMPLEX: p = (expptr) mkconst(TYDCOMPLEX); #ifndef GFLOAT *************** *** 715,720 case TYCOMPLEX: case TYDCOMPLEX: p = (expptr) mkconst(TYDCOMPLEX); longp = (long *) &(cp->const.cd[0]); rp = (long *) &(p->constblock.const.cd[0]); rp[0] = longp[0]; --- 901,907 ----- #endif GFLOAT case TYDCOMPLEX: p = (expptr) mkconst(TYDCOMPLEX); + #ifndef GFLOAT longp = (long *) &(cp->const.cd[0]); rp = (long *) &(p->constblock.const.cd[0]); rp[0] = longp[0]; *************** *** 721,726 rp[1] = longp[1]; rp[2] = longp[2]; rp[3] = longp[3]; break; case TYLOGICAL: --- 908,917 ----- rp[1] = longp[1]; rp[2] = longp[2]; rp[3] = longp[3]; + #else GFLOAT + p->constblock.const.cd[0] = cp->const.cd[0]; + p->constblock.const.cd[1] = cp->const.cd[1]; + #endif GFLOAT break; case TYLOGICAL: SHAR_EOF chmod +x 'conv.c.diff' if test -f 'expr.c.diff' then echo shar: over-writing existing file "'expr.c.diff'" fi cat << \SHAR_EOF > 'expr.c.diff' *** ../f77/src/f77pass1/expr.c.orig Tue Oct 29 15:15:54 1985 --- ../f77/src/f77pass1/expr.c Tue Oct 29 15:22:42 1985 *************** *** 151,157 register Constp p; p = mkconst(t); ! p->const.cd[0] = d; return( (expptr) p ); } --- 151,162 ----- register Constp p; p = mkconst(t); ! #ifdef GFLOAT ! if (t==TYREAL) ! p->const.cr[0] = d; ! else ! #endif GFLOAT ! p->const.cd[0] = d; return( (expptr) p ); } *************** *** 241,246 p = mkconst( (rtype==TYDREAL||itype==TYDREAL) ? TYDCOMPLEX : TYCOMPLEX); if( ISINT(rtype) ) p->const.cd[0] = realp->constblock.const.ci; else p->const.cd[0] = realp->constblock.const.cd[0]; if( ISINT(itype) ) p->const.cd[1] = imagp->constblock.const.ci; --- 246,255 ----- p = mkconst( (rtype==TYDREAL||itype==TYDREAL) ? TYDCOMPLEX : TYCOMPLEX); if( ISINT(rtype) ) p->const.cd[0] = realp->constblock.const.ci; + #ifdef GFLOAT + else if (rtype==TYREAL || itype==TYREAL) + p->const.cr[0] = realp->constblock.const.cr[0]; + #endif GFLOAT else p->const.cd[0] = realp->constblock.const.cd[0]; if( ISINT(itype) ) p->const.cd[1] = imagp->constblock.const.ci; *************** *** 244,249 else p->const.cd[0] = realp->constblock.const.cd[0]; if( ISINT(itype) ) p->const.cd[1] = imagp->constblock.const.ci; else p->const.cd[1] = imagp->constblock.const.cd[0]; } else --- 253,262 ----- else p->const.cd[0] = realp->constblock.const.cd[0]; if( ISINT(itype) ) p->const.cd[1] = imagp->constblock.const.ci; + #ifdef GFLOAT + else if (rtype==TYREAL || itype==TYREAL) + p->const.cr[1] = imagp->constblock.const.cr[0]; + #endif GFLOAT else p->const.cd[1] = imagp->constblock.const.cd[0]; } else *************** *** 2255,2261 lv->ci = rv->ccp[0]; else if( ISINT(rt) ) lv->ci = rv->ci; ! else lv->ci = rv->cd[0]; break; case TYCOMPLEX: --- 2268,2278 ----- lv->ci = rv->ccp[0]; else if( ISINT(rt) ) lv->ci = rv->ci; ! #ifdef GFLOAT ! else if (rt==TYREAL || rt==TYCOMPLEX) ! lv->ci = rv->cr[0]; /* should test */ ! #endif GFLOAT ! else lv->ci = rv->cd[0]; break; case TYCOMPLEX: *************** *** 2258,2264 else lv->ci = rv->cd[0]; break; ! case TYCOMPLEX: case TYDCOMPLEX: switch(rt) { --- 2275,2305 ----- else lv->ci = rv->cd[0]; break; ! case TYCOMPLEX: ! #ifdef GFLOAT ! switch(rt) ! { ! case TYSHORT: ! case TYLONG: ! /* fall through and do real assignment of ! first element */ ! case TYREAL: ! case TYDREAL: ! lv->cr[1] = 0; break; ! case TYCOMPLEX: ! lv->cr[1] = rv->cr[1]; break; ! case TYDCOMPLEX: /* should check range here */ ! lv->cr[1] = rv->cd[1]; break; ! } ! case TYREAL: ! if( ISINT(rt) ) ! lv->cr[0] = rv->ci; ! else if (rt==TYREAL || rt==TYCOMPLEX) ! lv->cr[0] = rv->cr[0]; ! else lv->cr[0] = rv->cd[0]; /* should test range */ ! break; ! ! #endif GFLOAT case TYDCOMPLEX: switch(rt) { *************** *** 2270,2276 case TYREAL: case TYDREAL: lv->cd[1] = 0; break; ! case TYCOMPLEX: case TYDCOMPLEX: lv->cd[1] = rv->cd[1]; break; } --- 2311,2320 ----- case TYREAL: case TYDREAL: lv->cd[1] = 0; break; ! case TYCOMPLEX: ! #ifdef GFLOAT ! lv->cd[1] = rv->cr[1]; break; ! #endif GFLOAT case TYDCOMPLEX: lv->cd[1] = rv->cd[1]; break; } *************** *** 2274,2280 case TYDCOMPLEX: lv->cd[1] = rv->cd[1]; break; } ! case TYREAL: case TYDREAL: if( ISINT(rt) ) --- 2318,2324 ----- case TYDCOMPLEX: lv->cd[1] = rv->cd[1]; break; } ! #ifndef GFLOAT case TYREAL: #endif GFLOAT case TYDREAL: *************** *** 2276,2281 } case TYREAL: case TYDREAL: if( ISINT(rt) ) lv->cd[0] = rv->ci; --- 2320,2326 ----- } #ifndef GFLOAT case TYREAL: + #endif GFLOAT case TYDREAL: if( ISINT(rt) ) lv->cd[0] = rv->ci; *************** *** 2279,2284 case TYDREAL: if( ISINT(rt) ) lv->cd[0] = rv->ci; else lv->cd[0] = rv->cd[0]; break; --- 2324,2333 ----- case TYDREAL: if( ISINT(rt) ) lv->cd[0] = rv->ci; + #ifdef GFLOAT + else if (rt==TYREAL || rt==TYCOMPLEX) + lv->cd[0] = rv->cr[0]; + #endif GFLOAT else lv->cd[0] = rv->cd[0]; break; *************** *** 2300,2306 p->const.ci = - p->const.ci; break; ! case TYCOMPLEX: case TYDCOMPLEX: p->const.cd[1] = - p->const.cd[1]; /* fall through and do the real parts */ --- 2349,2362 ----- p->const.ci = - p->const.ci; break; ! case TYCOMPLEX: ! #ifdef GFLOAT ! p->const.cr[1] = - p->const.cr[1]; ! /* fall through and do the real parts */ ! case TYREAL: ! p->const.cr[0] = - p->const.cr[0]; ! break; ! #endif GFLOAT case TYDCOMPLEX: p->const.cd[1] = - p->const.cd[1]; /* fall through and do the real parts */ *************** *** 2304,2309 case TYDCOMPLEX: p->const.cd[1] = - p->const.cd[1]; /* fall through and do the real parts */ case TYREAL: case TYDREAL: p->const.cd[0] = - p->const.cd[0]; --- 2360,2366 ----- case TYDCOMPLEX: p->const.cd[1] = - p->const.cd[1]; /* fall through and do the real parts */ + #ifndef GFLOAT case TYREAL: #endif GFLOAT case TYDREAL: *************** *** 2305,2310 p->const.cd[1] = - p->const.cd[1]; /* fall through and do the real parts */ case TYREAL: case TYDREAL: p->const.cd[0] = - p->const.cd[0]; break; --- 2362,2368 ----- /* fall through and do the real parts */ #ifndef GFLOAT case TYREAL: + #endif GFLOAT case TYDREAL: p->const.cd[0] = - p->const.cd[0]; break; *************** *** 2329,2335 case TYLONG: powp->ci = 1; break; ! case TYCOMPLEX: case TYDCOMPLEX: powp->cd[1] = 0; case TYREAL: --- 2387,2399 ----- case TYLONG: powp->ci = 1; break; ! case TYCOMPLEX: ! #ifdef GFLOAT ! powp->cr[1] = 0; ! case TYREAL: ! powp->cr[0] = 1; ! break; ! #endif GFLOAT case TYDCOMPLEX: powp->cd[1] = 0; #ifndef GFLOAT *************** *** 2332,2337 case TYCOMPLEX: case TYDCOMPLEX: powp->cd[1] = 0; case TYREAL: case TYDREAL: powp->cd[0] = 1; --- 2396,2402 ----- #endif GFLOAT case TYDCOMPLEX: powp->cd[1] = 0; + #ifndef GFLOAT case TYREAL: #endif GFLOAT case TYDREAL: *************** *** 2333,2338 case TYDCOMPLEX: powp->cd[1] = 0; case TYREAL: case TYDREAL: powp->cd[0] = 1; break; --- 2398,2404 ----- powp->cd[1] = 0; #ifndef GFLOAT case TYREAL: + #endif GFLOAT case TYDREAL: powp->cd[0] = 1; break; *************** *** 2383,2388 /* do constant operation cp = a op b */ LOCAL consbinop(opcode, type, cp, ap, bp) int opcode, type; --- 2449,2457 ----- /* do constant operation cp = a op b */ + #ifdef GFLOAT + struct rcomplex { double real, imag; }; + #endif GFLOAT LOCAL consbinop(opcode, type, cp, ap, bp) int opcode, type; *************** *** 2390,2395 { int k; double temp; switch(opcode) { --- 2459,2467 ----- { int k; double temp; + #ifdef GFLOAT + struct rcomplex fr, ar, br; + #endif GFLOAT switch(opcode) { *************** *** 2401,2406 cp->ci = ap->ci + bp->ci; break; case TYCOMPLEX: case TYDCOMPLEX: cp->cd[1] = ap->cd[1] + bp->cd[1]; case TYREAL: --- 2473,2484 ----- cp->ci = ap->ci + bp->ci; break; case TYCOMPLEX: + #ifdef GFLOAT + cp->cr[1] = ap->cr[1] + bp->cr[1]; + case TYREAL: + cp->cr[0] = ap->cr[0] + bp->cr[0]; + break; + #endif GFLOAT case TYDCOMPLEX: cp->cd[1] = ap->cd[1] + bp->cd[1]; #ifndef GFLOAT *************** *** 2403,2408 case TYCOMPLEX: case TYDCOMPLEX: cp->cd[1] = ap->cd[1] + bp->cd[1]; case TYREAL: case TYDREAL: cp->cd[0] = ap->cd[0] + bp->cd[0]; --- 2481,2487 ----- #endif GFLOAT case TYDCOMPLEX: cp->cd[1] = ap->cd[1] + bp->cd[1]; + #ifndef GFLOAT case TYREAL: #endif GFLOAT case TYDREAL: *************** *** 2404,2409 case TYDCOMPLEX: cp->cd[1] = ap->cd[1] + bp->cd[1]; case TYREAL: case TYDREAL: cp->cd[0] = ap->cd[0] + bp->cd[0]; break; --- 2483,2489 ----- cp->cd[1] = ap->cd[1] + bp->cd[1]; #ifndef GFLOAT case TYREAL: + #endif GFLOAT case TYDREAL: cp->cd[0] = ap->cd[0] + bp->cd[0]; break; *************** *** 2417,2423 case TYLONG: cp->ci = ap->ci - bp->ci; break; ! case TYCOMPLEX: case TYDCOMPLEX: cp->cd[1] = ap->cd[1] - bp->cd[1]; case TYREAL: --- 2497,2509 ----- case TYLONG: cp->ci = ap->ci - bp->ci; break; ! case TYCOMPLEX: ! #ifdef GFLOAT ! cp->cr[1] = ap->cr[1] - bp->cr[1]; ! case TYREAL: ! cp->cr[0] = ap->cr[0] - bp->cr[0]; ! break; ! #endif GFLOAT case TYDCOMPLEX: cp->cd[1] = ap->cd[1] - bp->cd[1]; #ifndef GFLOAT *************** *** 2420,2425 case TYCOMPLEX: case TYDCOMPLEX: cp->cd[1] = ap->cd[1] - bp->cd[1]; case TYREAL: case TYDREAL: cp->cd[0] = ap->cd[0] - bp->cd[0]; --- 2506,2512 ----- #endif GFLOAT case TYDCOMPLEX: cp->cd[1] = ap->cd[1] - bp->cd[1]; + #ifndef GFLOAT case TYREAL: #endif GFLOAT case TYDREAL: *************** *** 2421,2426 case TYDCOMPLEX: cp->cd[1] = ap->cd[1] - bp->cd[1]; case TYREAL: case TYDREAL: cp->cd[0] = ap->cd[0] - bp->cd[0]; break; --- 2508,2514 ----- cp->cd[1] = ap->cd[1] - bp->cd[1]; #ifndef GFLOAT case TYREAL: + #endif GFLOAT case TYDREAL: cp->cd[0] = ap->cd[0] - bp->cd[0]; break; *************** *** 2434,2440 case TYLONG: cp->ci = ap->ci * bp->ci; break; ! case TYREAL: case TYDREAL: cp->cd[0] = ap->cd[0] * bp->cd[0]; break; --- 2522,2532 ----- case TYLONG: cp->ci = ap->ci * bp->ci; break; ! case TYREAL: ! #ifdef GFLOAT ! cp->cr[0] = ap->cr[0] * bp->cr[0]; ! break; ! #endif GFLOAT case TYDREAL: cp->cd[0] = ap->cd[0] * bp->cd[0]; break; *************** *** 2439,2444 cp->cd[0] = ap->cd[0] * bp->cd[0]; break; case TYCOMPLEX: case TYDCOMPLEX: temp = ap->cd[0] * bp->cd[0] - ap->cd[1] * bp->cd[1] ; --- 2531,2544 ----- cp->cd[0] = ap->cd[0] * bp->cd[0]; break; case TYCOMPLEX: + #ifdef GFLOAT + temp = ap->cr[0] * bp->cr[0] - + ap->cr[1] * bp->cr[1] ; + cp->cr[1] = ap->cr[0] * bp->cr[1] + + ap->cr[1] * bp->cr[0] ; + cp->cr[0] = temp; + break; + #endif GFLOAT case TYDCOMPLEX: temp = ap->cd[0] * bp->cd[0] - ap->cd[1] * bp->cd[1] ; *************** *** 2455,2461 case TYLONG: cp->ci = ap->ci / bp->ci; break; ! case TYREAL: case TYDREAL: cp->cd[0] = ap->cd[0] / bp->cd[0]; break; --- 2555,2565 ----- case TYLONG: cp->ci = ap->ci / bp->ci; break; ! case TYREAL: ! #ifdef GFLOAT ! cp->cr[0] = ap->cr[0] / bp->cr[0]; ! break; ! #endif GFLOAT case TYDREAL: cp->cd[0] = ap->cd[0] / bp->cd[0]; break; *************** *** 2460,2465 cp->cd[0] = ap->cd[0] / bp->cd[0]; break; case TYCOMPLEX: case TYDCOMPLEX: zdiv(cp,ap,bp); break; --- 2564,2579 ----- cp->cd[0] = ap->cd[0] / bp->cd[0]; break; case TYCOMPLEX: + #ifdef GFLOAT + ar.real = ap->cr[0]; + ar.imag = ap->cr[1]; + br.real = bp->cr[0]; + br.imag = bp->cr[1]; + zdiv(fr,ar,br); + cp->cr[0] = fr.real; /* should test */ + cp->cr[1] = fr.imag; + break; + #endif GFLOAT case TYDCOMPLEX: zdiv(cp,ap,bp); break; *************** *** 2486,2492 k = 0; else k = 1; break; ! case TYREAL: case TYDREAL: if(ap->cd[0] < bp->cd[0]) k = -1; --- 2600,2606 ----- k = 0; else k = 1; break; ! case TYREAL: /*assume this works for G format floats */ case TYDREAL: if(ap->cd[0] < bp->cd[0]) k = -1; *************** *** 2494,2500 k = 0; else k = 1; break; ! case TYCOMPLEX: case TYDCOMPLEX: if(ap->cd[0] == bp->cd[0] && ap->cd[1] == bp->cd[1] ) --- 2608,2621 ----- k = 0; else k = 1; break; ! case TYCOMPLEX: ! #ifdef GFLOAT ! if(ap->cr[0] == bp->cr[0] && ! ap->cr[1] == bp->cr[1] ) ! k = 0; ! else k = 1; ! break; ! #endif GFLOAT case TYDCOMPLEX: if(ap->cd[0] == bp->cd[0] && ap->cd[1] == bp->cd[1] ) *************** *** 2547,2553 if(p->constblock.const.ci < 0) return(-1); return(0); ! case TYREAL: case TYDREAL: if(p->constblock.const.cd[0] > 0) return(1); if(p->constblock.const.cd[0] < 0) return(-1); --- 2668,2679 ----- if(p->constblock.const.ci < 0) return(-1); return(0); ! case TYREAL: ! #ifdef GFLOAT ! if(p->constblock.const.cr[0] > 0) return(1); ! if(p->constblock.const.cr[0] < 0) return(-1); ! return(0); ! #endif GFLOAT case TYDREAL: if(p->constblock.const.cd[0] > 0) return(1); if(p->constblock.const.cd[0] < 0) return(-1); *************** *** 2553,2559 if(p->constblock.const.cd[0] < 0) return(-1); return(0); ! case TYCOMPLEX: case TYDCOMPLEX: return(p->constblock.const.cd[0]!=0 || p->constblock.const.cd[1]!=0); --- 2679,2687 ----- if(p->constblock.const.cd[0] < 0) return(-1); return(0); ! case TYCOMPLEX: ! #ifdef GFLOAT ! return(p->constblock.const.cr[0]!=0 || p->constblock.const.cr[1]!=0); case TYDCOMPLEX: return(p->constblock.const.cd[0]!=0 || p->constblock.const.cd[1]!=0); #else GFLOAT *************** *** 2555,2561 case TYCOMPLEX: case TYDCOMPLEX: ! return(p->constblock.const.cd[0]!=0 || p->constblock.const.cd[1]!=0); default: badtype( "conssgn", p->constblock.vtype); --- 2683,2693 ----- #ifdef GFLOAT return(p->constblock.const.cr[0]!=0 || p->constblock.const.cr[1]!=0); case TYDCOMPLEX: ! return(p->constblock.const.cd[0]!=0 || p->constblock.const.cd[1]!=0); ! #else GFLOAT ! case TYDCOMPLEX: ! return(p->constblock.const.cd[0]!=0 || p->constblock.const.cd[1]!=0); ! #endif GFLOAT default: badtype( "conssgn", p->constblock.vtype); SHAR_EOF chmod +x 'expr.c.diff' if test -f 'defs.h.diff' then echo shar: over-writing existing file "'defs.h.diff'" fi cat << \SHAR_EOF > 'defs.h.diff' *** ../f77/src/f77pass1/defs.h.orig Tue Oct 29 15:15:49 1985 --- ../f77/src/f77pass1/defs.h Tue Oct 29 15:22:31 1985 *************** *** 367,372 char *ccp; ftnint ci; double cd[2]; }; struct Constblock --- 367,375 ----- char *ccp; ftnint ci; double cd[2]; + #ifdef GFLOAT + float cr[4]; + #endif GFLOAT }; struct Constblock SHAR_EOF chmod +x 'defs.h.diff' chdir .. chdir .. chdir .. chdir .. # End of shell archive exit 0
sources-request@panda.UUCP (11/11/85)
Mod.sources: Volume 3, Issue 40
Submitted by: J.D.Aplevich <decvax!watmath!watdcsu!aplevich>
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# gfloat
# This archive created: Wed Oct 30 20:44:40 1985
export PATH; PATH=/bin:$PATH
if test ! -d 'gfloat'
then
mkdir 'gfloat'
fi
cd 'gfloat'
if test ! -d 'f77'
then
mkdir 'f77'
fi
cd 'f77'
if test ! -d 'src'
then
mkdir 'src'
fi
cd 'src'
if test ! -d 'f77pass1'
then
mkdir 'f77pass1'
fi
cd 'f77pass1'
if test -f 'intr.c.diff'
then
echo shar: over-writing existing file "'intr.c.diff'"
fi
cat << \SHAR_EOF > 'intr.c.diff'
*** ../f77/src/f77pass1/intr.c.orig Tue Oct 29 15:16:01 1985
--- ../f77/src/f77pass1/intr.c Tue Oct 29 15:22:50 1985
***************
*** 237,242
{ TYCOMPLEX,TYCOMPLEX,1,"r_cnjg" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"d_cnjg" },
{ TYREAL,TYREAL,1,"r_sqrt", 1 },
{ TYDREAL,TYDREAL,1,"d_sqrt", 1 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_sqrt" },
--- 237,243 -----
{ TYCOMPLEX,TYCOMPLEX,1,"r_cnjg" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"d_cnjg" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_sqrt", 1 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_sqrt" },
***************
*** 238,243
{ TYDCOMPLEX,TYDCOMPLEX,1,"d_cnjg" },
{ TYREAL,TYREAL,1,"r_sqrt", 1 },
{ TYDREAL,TYDREAL,1,"d_sqrt", 1 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_sqrt" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sqrt" },
--- 239,247 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_sqrt", 1 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_sqrt" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_sqrt", 1 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_sqrt" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sqrt" },
***************
*** 242,247
{ TYCOMPLEX,TYCOMPLEX,1,"c_sqrt" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sqrt" },
{ TYREAL,TYREAL,1,"r_exp", 2 },
{ TYDREAL,TYDREAL,1,"d_exp", 2 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_exp" },
--- 246,252 -----
{ TYCOMPLEX,TYCOMPLEX,1,"c_sqrt" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sqrt" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_exp", 2 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_exp" },
***************
*** 243,248
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sqrt" },
{ TYREAL,TYREAL,1,"r_exp", 2 },
{ TYDREAL,TYDREAL,1,"d_exp", 2 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_exp" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_exp" },
--- 248,256 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_exp", 2 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_exp" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_exp", 2 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_exp" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_exp" },
***************
*** 247,252
{ TYCOMPLEX,TYCOMPLEX,1,"c_exp" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_exp" },
{ TYREAL,TYREAL,1,"r_log", 3 },
{ TYDREAL,TYDREAL,1,"d_log", 3 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_log" },
--- 255,261 -----
{ TYCOMPLEX,TYCOMPLEX,1,"c_exp" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_exp" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_log", 3 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_log" },
***************
*** 248,253
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_exp" },
{ TYREAL,TYREAL,1,"r_log", 3 },
{ TYDREAL,TYDREAL,1,"d_log", 3 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_log" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_log" },
--- 257,265 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_log", 3 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_log" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_log", 3 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_log" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_log" },
***************
*** 255,260
{ TYREAL,TYREAL,1,"r_lg10" },
{ TYDREAL,TYDREAL,1,"d_lg10" },
{ TYREAL,TYREAL,1,"r_sin", 4 },
{ TYDREAL,TYDREAL,1,"d_sin", 4 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_sin" },
--- 267,273 -----
{ TYREAL,TYREAL,1,"r_lg10" },
{ TYDREAL,TYDREAL,1,"d_lg10" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_sin", 4 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_sin" },
***************
*** 256,261
{ TYDREAL,TYDREAL,1,"d_lg10" },
{ TYREAL,TYREAL,1,"r_sin", 4 },
{ TYDREAL,TYDREAL,1,"d_sin", 4 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_sin" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sin" },
--- 269,277 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_sin", 4 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_sin" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_sin", 4 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_sin" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sin" },
***************
*** 260,265
{ TYCOMPLEX,TYCOMPLEX,1,"c_sin" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sin" },
{ TYREAL,TYREAL,1,"r_cos", 5 },
{ TYDREAL,TYDREAL,1,"d_cos", 5 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_cos" },
--- 276,282 -----
{ TYCOMPLEX,TYCOMPLEX,1,"c_sin" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sin" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_cos", 5 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_cos" },
***************
*** 261,266
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_sin" },
{ TYREAL,TYREAL,1,"r_cos", 5 },
{ TYDREAL,TYDREAL,1,"d_cos", 5 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_cos" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_cos" },
--- 278,286 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_cos", 5 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_cos" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_cos", 5 },
{ TYCOMPLEX,TYCOMPLEX,1,"c_cos" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_cos" },
***************
*** 265,270
{ TYCOMPLEX,TYCOMPLEX,1,"c_cos" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_cos" },
{ TYREAL,TYREAL,1,"r_tan", 6 },
{ TYDREAL,TYDREAL,1,"d_tan", 6 },
--- 285,291 -----
{ TYCOMPLEX,TYCOMPLEX,1,"c_cos" },
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_cos" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_tan", 6 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_tan" },
***************
*** 266,271
{ TYDCOMPLEX,TYDCOMPLEX,1,"z_cos" },
{ TYREAL,TYREAL,1,"r_tan", 6 },
{ TYDREAL,TYDREAL,1,"d_tan", 6 },
{ TYREAL,TYREAL,1,"r_asin", 7 },
--- 287,295 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_tan", 6 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_tan" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_tan", 6 },
#ifndef GFLOAT
***************
*** 268,273
{ TYREAL,TYREAL,1,"r_tan", 6 },
{ TYDREAL,TYDREAL,1,"d_tan", 6 },
{ TYREAL,TYREAL,1,"r_asin", 7 },
{ TYDREAL,TYDREAL,1,"d_asin", 7 },
--- 292,298 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_tan", 6 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_asin", 7 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_asin" },
***************
*** 269,274
{ TYDREAL,TYDREAL,1,"d_tan", 6 },
{ TYREAL,TYREAL,1,"r_asin", 7 },
{ TYDREAL,TYDREAL,1,"d_asin", 7 },
{ TYREAL,TYREAL,1,"r_acos", 8 },
--- 294,302 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_asin", 7 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_asin" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_asin", 7 },
#ifndef GFLOAT
***************
*** 271,276
{ TYREAL,TYREAL,1,"r_asin", 7 },
{ TYDREAL,TYDREAL,1,"d_asin", 7 },
{ TYREAL,TYREAL,1,"r_acos", 8 },
{ TYDREAL,TYDREAL,1,"d_acos", 8 },
--- 299,305 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_asin", 7 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_acos", 8 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_acos" },
***************
*** 272,277
{ TYDREAL,TYDREAL,1,"d_asin", 7 },
{ TYREAL,TYREAL,1,"r_acos", 8 },
{ TYDREAL,TYDREAL,1,"d_acos", 8 },
{ TYREAL,TYREAL,1,"r_atan", 9 },
--- 301,309 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_acos", 8 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_acos" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_acos", 8 },
#ifndef GFLOAT
***************
*** 274,279
{ TYREAL,TYREAL,1,"r_acos", 8 },
{ TYDREAL,TYDREAL,1,"d_acos", 8 },
{ TYREAL,TYREAL,1,"r_atan", 9 },
{ TYDREAL,TYDREAL,1,"d_atan", 9 },
--- 306,312 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_acos", 8 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_atan", 9 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_atan" },
***************
*** 275,280
{ TYDREAL,TYDREAL,1,"d_acos", 8 },
{ TYREAL,TYREAL,1,"r_atan", 9 },
{ TYDREAL,TYDREAL,1,"d_atan", 9 },
{ TYREAL,TYREAL,2,"r_atn2", 10 },
--- 308,316 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_atan", 9 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_atan" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_atan", 9 },
#ifndef GFLOAT
***************
*** 277,282
{ TYREAL,TYREAL,1,"r_atan", 9 },
{ TYDREAL,TYDREAL,1,"d_atan", 9 },
{ TYREAL,TYREAL,2,"r_atn2", 10 },
{ TYDREAL,TYDREAL,2,"d_atn2", 10 },
--- 313,319 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_atan", 9 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,2,"r_atn2", 10 },
#else GFLOAT
{ TYREAL,TYREAL,2,"r_atn2" },
***************
*** 278,283
{ TYDREAL,TYDREAL,1,"d_atan", 9 },
{ TYREAL,TYREAL,2,"r_atn2", 10 },
{ TYDREAL,TYDREAL,2,"d_atn2", 10 },
{ TYREAL,TYREAL,1,"r_sinh", 11 },
--- 315,323 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,2,"r_atn2", 10 },
+ #else GFLOAT
+ { TYREAL,TYREAL,2,"r_atn2" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,2,"d_atn2", 10 },
#ifndef GFLOAT
***************
*** 280,285
{ TYREAL,TYREAL,2,"r_atn2", 10 },
{ TYDREAL,TYDREAL,2,"d_atn2", 10 },
{ TYREAL,TYREAL,1,"r_sinh", 11 },
{ TYDREAL,TYDREAL,1,"d_sinh", 11 },
--- 320,326 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,2,"d_atn2", 10 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_sinh", 11 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_sinh" },
***************
*** 281,286
{ TYDREAL,TYDREAL,2,"d_atn2", 10 },
{ TYREAL,TYREAL,1,"r_sinh", 11 },
{ TYDREAL,TYDREAL,1,"d_sinh", 11 },
{ TYREAL,TYREAL,1,"r_cosh", 12 },
--- 322,330 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_sinh", 11 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_sinh" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_sinh", 11 },
#ifndef GFLOAT
***************
*** 283,288
{ TYREAL,TYREAL,1,"r_sinh", 11 },
{ TYDREAL,TYDREAL,1,"d_sinh", 11 },
{ TYREAL,TYREAL,1,"r_cosh", 12 },
{ TYDREAL,TYDREAL,1,"d_cosh", 12 },
--- 327,333 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_sinh", 11 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_cosh", 12 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_cosh" },
***************
*** 284,289
{ TYDREAL,TYDREAL,1,"d_sinh", 11 },
{ TYREAL,TYREAL,1,"r_cosh", 12 },
{ TYDREAL,TYDREAL,1,"d_cosh", 12 },
{ TYREAL,TYREAL,1,"r_tanh", 13 },
--- 329,337 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_cosh", 12 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_cosh" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_cosh", 12 },
#ifndef GFLOAT
***************
*** 286,291
{ TYREAL,TYREAL,1,"r_cosh", 12 },
{ TYDREAL,TYDREAL,1,"d_cosh", 12 },
{ TYREAL,TYREAL,1,"r_tanh", 13 },
{ TYDREAL,TYDREAL,1,"d_tanh", 13 },
--- 334,340 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_cosh", 12 },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_tanh", 13 },
#else GFLOAT
{ TYREAL,TYREAL,1,"r_tanh" },
***************
*** 287,292
{ TYDREAL,TYDREAL,1,"d_cosh", 12 },
{ TYREAL,TYREAL,1,"r_tanh", 13 },
{ TYDREAL,TYDREAL,1,"d_tanh", 13 },
{ TYCHAR,TYLOGICAL,2,"hl_ge" },
--- 336,344 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_tanh", 13 },
+ #else GFLOAT
+ { TYREAL,TYREAL,1,"r_tanh" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_tanh", 13 },
{ TYCHAR,TYLOGICAL,2,"hl_ge" },
***************
*** 306,311
{ TYDREAL,TYSHORT,1,"hd_expn" },
{ TYDREAL,TYLONG,1,"id_expn" },
{ TYREAL,TYREAL,1,"r_absp" },
{ TYDREAL,TYDREAL,1,"d_absp" },
--- 358,364 -----
{ TYDREAL,TYSHORT,1,"hd_expn" },
{ TYDREAL,TYLONG,1,"id_expn" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_absp" },
#else GFLOAT
{ TYREAL,TYDREAL,1,"r_absp" },
***************
*** 307,312
{ TYDREAL,TYLONG,1,"id_expn" },
{ TYREAL,TYREAL,1,"r_absp" },
{ TYDREAL,TYDREAL,1,"d_absp" },
{ TYREAL,TYDREAL,1,"r_rrsp" },
--- 360,368 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_absp" },
+ #else GFLOAT
+ { TYREAL,TYDREAL,1,"r_absp" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_absp" },
{ TYREAL,TYDREAL,1,"r_rrsp" },
***************
*** 312,317
{ TYREAL,TYDREAL,1,"r_rrsp" },
{ TYDREAL,TYDREAL,1,"d_rrsp" },
{ TYREAL,TYREAL,1,"r_frac" },
{ TYDREAL,TYDREAL,1,"d_frac" },
--- 368,374 -----
{ TYREAL,TYDREAL,1,"r_rrsp" },
{ TYDREAL,TYDREAL,1,"d_rrsp" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_frac" },
#else GFLOAT
{ TYREAL,TYDREAL,1,"r_frac" },
***************
*** 313,318
{ TYDREAL,TYDREAL,1,"d_rrsp" },
{ TYREAL,TYREAL,1,"r_frac" },
{ TYDREAL,TYDREAL,1,"d_frac" },
{ TYREAL,TYREAL,2,"r_make" },
--- 370,378 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,1,"r_frac" },
+ #else GFLOAT
+ { TYREAL,TYDREAL,1,"r_frac" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_frac" },
#ifndef GFLOAT
***************
*** 315,320
{ TYREAL,TYREAL,1,"r_frac" },
{ TYDREAL,TYDREAL,1,"d_frac" },
{ TYREAL,TYREAL,2,"r_make" },
{ TYDREAL,TYDREAL,2,"d_make" },
--- 375,381 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,1,"d_frac" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,2,"r_make" },
#else GFLOAT
{ TYREAL,TYDREAL,2,"r_make" },
***************
*** 316,321
{ TYDREAL,TYDREAL,1,"d_frac" },
{ TYREAL,TYREAL,2,"r_make" },
{ TYDREAL,TYDREAL,2,"d_make" },
{ TYREAL,TYREAL,2,"r_scal" },
--- 377,385 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,2,"r_make" },
+ #else GFLOAT
+ { TYREAL,TYDREAL,2,"r_make" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,2,"d_make" },
#ifndef GFLOAT
***************
*** 318,323
{ TYREAL,TYREAL,2,"r_make" },
{ TYDREAL,TYDREAL,2,"d_make" },
{ TYREAL,TYREAL,2,"r_scal" },
{ TYDREAL,TYDREAL,2,"d_scal" }
} ;
--- 382,388 -----
#endif GFLOAT
{ TYDREAL,TYDREAL,2,"d_make" },
+ #ifndef GFLOAT
{ TYREAL,TYREAL,2,"r_scal" },
#else GFLOAT
{ TYREAL,TYDREAL,2,"r_scal" },
***************
*** 319,324
{ TYDREAL,TYDREAL,2,"d_make" },
{ TYREAL,TYREAL,2,"r_scal" },
{ TYDREAL,TYDREAL,2,"d_scal" }
} ;
--- 384,392 -----
#ifndef GFLOAT
{ TYREAL,TYREAL,2,"r_scal" },
+ #else GFLOAT
+ { TYREAL,TYDREAL,2,"r_scal" },
+ #endif GFLOAT
{ TYDREAL,TYDREAL,2,"d_scal" }
} ;
SHAR_EOF
chmod +x 'intr.c.diff'
if test -f 'optcse.c.diff'
then
echo shar: over-writing existing file "'optcse.c.diff'"
fi
cat << \SHAR_EOF > 'optcse.c.diff'
*** ../f77/src/f77pass1/optcse.c.orig Tue Oct 29 15:16:07 1985
--- ../f77/src/f77pass1/optcse.c Tue Oct 29 15:22:56 1985
***************
*** 477,483
case TYLONG:
if(ap->ci == bp->ci) return(TRUE);
break;
! case TYREAL:
case TYDREAL:
if(ap->cd[0] == bp->cd[0]) return(TRUE);
break;
--- 477,487 -----
case TYLONG:
if(ap->ci == bp->ci) return(TRUE);
break;
! case TYREAL:
! #ifdef GFLOAT
! if(ap->cr[0] == bp->cr[0]) return(TRUE);
! break;
! #endif GFLOAT
case TYDREAL:
if(ap->cd[0] == bp->cd[0]) return(TRUE);
break;
***************
*** 482,487
if(ap->cd[0] == bp->cd[0]) return(TRUE);
break;
case TYCOMPLEX:
case TYDCOMPLEX:
if(ap->cd[0] == bp->cd[0] &&
ap->cd[1] == bp->cd[1] )
--- 486,497 -----
if(ap->cd[0] == bp->cd[0]) return(TRUE);
break;
case TYCOMPLEX:
+ #ifdef GFLOAT
+ if(ap->cr[0] == bp->cr[0] &&
+ ap->cr[1] == bp->cr[1] )
+ return(TRUE);
+ break;
+ #endif GFLOAT
case TYDCOMPLEX:
if(ap->cd[0] == bp->cd[0] &&
ap->cd[1] == bp->cd[1] )
SHAR_EOF
chmod +x 'optcse.c.diff'
if test -f 'optloop.c.diff'
then
echo shar: over-writing existing file "'optloop.c.diff'"
fi
cat << \SHAR_EOF > 'optloop.c.diff'
*** ../f77/src/f77pass1/optloop.c.orig Tue Oct 29 15:16:09 1985
--- ../f77/src/f77pass1/optloop.c Wed Oct 30 20:26:44 1985
***************
*** 660,665
return YES;
if (ISREAL(p->constblock.vtype))
if (abs(p->constblock.const.cd[0]) <= 1.0)
return YES;
--- 660,666 -----
return YES;
if (ISREAL(p->constblock.vtype))
+ #ifndef GFLOAT
if (abs(p->constblock.const.cd[0]) <= 1.0)
#else GFLOAT
if (p->constblock.vtype==TYREAL) {
***************
*** 661,666
if (ISREAL(p->constblock.vtype))
if (abs(p->constblock.const.cd[0]) <= 1.0)
return YES;
return NO;
--- 662,673 -----
if (ISREAL(p->constblock.vtype))
#ifndef GFLOAT
if (abs(p->constblock.const.cd[0]) <= 1.0)
+ #else GFLOAT
+ if (p->constblock.vtype==TYREAL) {
+ if (abs(p->constblock.const.cr[0]) <= 1.0) return YES;
+ }
+ else if (abs(p->constblock.const.cd[0]) <= 1.0)
+ #endif GFLOAT
return YES;
return NO;
SHAR_EOF
chmod +x 'optloop.c.diff'
if test -f 'put.c.diff'
then
echo shar: over-writing existing file "'put.c.diff'"
fi
cat << \SHAR_EOF > 'put.c.diff'
*** ../f77/src/f77pass1/put.c.orig Tue Oct 29 15:16:12 1985
--- ../f77/src/f77pass1/put.c Tue Oct 29 15:23:07 1985
***************
*** 169,174
if (ISCONST(p))
{
if (ISCOMPLEX(p->constblock.vtype))
return(mkrealcon(p->constblock.vtype == TYCOMPLEX ?
TYREAL : TYDREAL,
--- 169,175 -----
if (ISCONST(p))
{
+ #ifndef GFLOAT
if (ISCOMPLEX(p->constblock.vtype))
return(mkrealcon(p->constblock.vtype == TYCOMPLEX ?
TYREAL : TYDREAL,
***************
*** 173,178
return(mkrealcon(p->constblock.vtype == TYCOMPLEX ?
TYREAL : TYDREAL,
p->constblock.const.cd[1]));
else if (p->constblock.vtype == TYDREAL)
return(mkrealcon(TYDREAL, 0.0));
else
--- 174,186 -----
return(mkrealcon(p->constblock.vtype == TYCOMPLEX ?
TYREAL : TYDREAL,
p->constblock.const.cd[1]));
+ #else GFLOAT
+ if (p->constblock.vtype == TYCOMPLEX)
+ return(mkrealcon( TYREAL,
+ (double) p->constblock.const.cr[1]));
+ else if (p->constblock.vtype == TYDCOMPLEX)
+ return(mkrealcon( TYDREAL, p->constblock.const.cd[1]));
+ #endif GFLOAT
else if (p->constblock.vtype == TYDREAL)
return(mkrealcon(TYDREAL, 0.0));
else
***************
*** 340,345
k = 2;
case TYREAL:
type = TYREAL;
goto flpt;
case TYDCOMPLEX:
--- 348,354 -----
k = 2;
case TYREAL:
type = TYREAL;
+ #ifndef GFLOAT
goto flpt;
#else GFLOAT
for(i = 0 ; i < k ; ++i)
***************
*** 341,346
case TYREAL:
type = TYREAL;
goto flpt;
case TYDCOMPLEX:
k = 2;
--- 350,360 -----
type = TYREAL;
#ifndef GFLOAT
goto flpt;
+ #else GFLOAT
+ for(i = 0 ; i < k ; ++i)
+ prconr(asmfile, type, &p->const.cr[i]);
+ break;
+ #endif GFLOAT
case TYDCOMPLEX:
k = 2;
***************
*** 346,351
k = 2;
case TYDREAL:
type = TYDREAL;
flpt:
for(i = 0 ; i < k ; ++i)
--- 360,366 -----
k = 2;
case TYDREAL:
type = TYDREAL;
+ #ifndef GFLOAT
flpt:
#endif GFLOAT
***************
*** 348,353
type = TYDREAL;
flpt:
for(i = 0 ; i < k ; ++i)
prconr(asmfile, type, p->const.cd[i]);
break;
--- 363,369 -----
#ifndef GFLOAT
flpt:
+ #endif GFLOAT
for(i = 0 ; i < k ; ++i)
#ifndef GFLOAT
prconr(asmfile, type, p->const.cd[i]);
***************
*** 349,354
flpt:
for(i = 0 ; i < k ; ++i)
prconr(asmfile, type, p->const.cd[i]);
break;
--- 365,371 -----
flpt:
#endif GFLOAT
for(i = 0 ; i < k ; ++i)
+ #ifndef GFLOAT
prconr(asmfile, type, p->const.cd[i]);
#else GFLOAT
prconr(asmfile, type, &p->const.cd[i]);
***************
*** 350,355
flpt:
for(i = 0 ; i < k ; ++i)
prconr(asmfile, type, p->const.cd[i]);
break;
case TYCHAR:
--- 367,375 -----
for(i = 0 ; i < k ; ++i)
#ifndef GFLOAT
prconr(asmfile, type, p->const.cd[i]);
+ #else GFLOAT
+ prconr(asmfile, type, &p->const.cd[i]);
+ #endif GFLOAT
break;
case TYCHAR:
SHAR_EOF
chmod +x 'put.c.diff'
if test -f 'vax.c.diff'
then
echo shar: over-writing existing file "'vax.c.diff'"
fi
cat << \SHAR_EOF > 'vax.c.diff'
*** ../f77/src/f77pass1/vax.c.orig Tue Oct 29 15:16:18 1985
--- ../f77/src/f77pass1/vax.c Tue Oct 29 15:23:13 1985
***************
*** 69,74
ftnint intcon[14] =
{ 2, 2, 2, 2,
15, 31, 24, 56,
-128, -128, 127, 127,
32767, 2147483647 };
--- 69,75 -----
ftnint intcon[14] =
{ 2, 2, 2, 2,
+ #ifndef GFLOAT
15, 31, 24, 56,
-128, -128, 127, 127,
#else GFLOAT
***************
*** 71,76
{ 2, 2, 2, 2,
15, 31, 24, 56,
-128, -128, 127, 127,
32767, 2147483647 };
#if HERE == VAX
--- 72,81 -----
#ifndef GFLOAT
15, 31, 24, 56,
-128, -128, 127, 127,
+ #else GFLOAT
+ 15, 31, 24, 53,
+ -128, -1024, 127, 1023,
+ #endif GFLOAT
32767, 2147483647 };
#if HERE == VAX
***************
*** 78,83
long realcon[6][2] =
{
{ 0200, 0 },
{ 0200, 0 },
{ 037777677777, 0 },
{ 037777677777, 037777777777 },
--- 83,89 -----
long realcon[6][2] =
{
{ 0200, 0 },
+ #ifndef GFLOAT
{ 0200, 0 },
#else GFLOAT
{ 0020, 0 },
***************
*** 79,84
{
{ 0200, 0 },
{ 0200, 0 },
{ 037777677777, 0 },
{ 037777677777, 037777777777 },
{ 032200, 0 },
--- 85,93 -----
{ 0200, 0 },
#ifndef GFLOAT
{ 0200, 0 },
+ #else GFLOAT
+ { 0020, 0 },
+ #endif GFLOAT
{ 037777677777, 0 },
#ifndef GFLOAT
{ 037777677777, 037777777777 },
***************
*** 80,85
{ 0200, 0 },
{ 0200, 0 },
{ 037777677777, 0 },
{ 037777677777, 037777777777 },
{ 032200, 0 },
{ 022200, 0 }
--- 89,95 -----
{ 0020, 0 },
#endif GFLOAT
{ 037777677777, 0 },
+ #ifndef GFLOAT
{ 037777677777, 037777777777 },
#else GFLOAT
{ 037777677777, 037777777777 },
***************
*** 81,86
{ 0200, 0 },
{ 037777677777, 0 },
{ 037777677777, 037777777777 },
{ 032200, 0 },
{ 022200, 0 }
};
--- 91,99 -----
{ 037777677777, 0 },
#ifndef GFLOAT
{ 037777677777, 037777777777 },
+ #else GFLOAT
+ { 037777677777, 037777777777 },
+ #endif GFLOAT
{ 032200, 0 },
#ifndef GFLOAT
{ 022200, 0 }
***************
*** 82,87
{ 037777677777, 0 },
{ 037777677777, 037777777777 },
{ 032200, 0 },
{ 022200, 0 }
};
#else
--- 95,101 -----
{ 037777677777, 037777777777 },
#endif GFLOAT
{ 032200, 0 },
+ #ifndef GFLOAT
{ 022200, 0 }
#else GFLOAT
{ 036320, 0 }
***************
*** 83,88
{ 037777677777, 037777777777 },
{ 032200, 0 },
{ 022200, 0 }
};
#else
double realcon[6] =
--- 97,105 -----
{ 032200, 0 },
#ifndef GFLOAT
{ 022200, 0 }
+ #else GFLOAT
+ { 036320, 0 }
+ #endif GFLOAT
};
#else
double realcon[6] =
***************
*** 197,202
prconr(fp, type, x)
FILEP fp;
int type;
float x;
{
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
--- 214,220 -----
prconr(fp, type, x)
FILEP fp;
int type;
+ #ifndef GFLOAT
float x;
#else GFLOAT
float *x;
***************
*** 198,203
FILEP fp;
int type;
float x;
{
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
}
--- 216,224 -----
int type;
#ifndef GFLOAT
float x;
+ #else GFLOAT
+ float *x;
+ #endif GFLOAT
{
#ifndef GFLOAT
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
***************
*** 199,204
int type;
float x;
{
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
}
#endif
--- 220,226 -----
float *x;
#endif GFLOAT
{
+ #ifndef GFLOAT
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
#else GFLOAT
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), *x);
***************
*** 200,205
float x;
{
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
}
#endif
--- 222,230 -----
{
#ifndef GFLOAT
fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), x);
+ #else GFLOAT
+ fprintf(fp, "\t%s\t0f%e\n", (type==TYREAL ? ".float" : ".double"), *x);
+ #endif GFLOAT
}
#endif
***************
*** 207,212
prconr(fp, type, x)
FILEP fp;
int type;
double x;
{
/* non-portable cheat to preserve bit patterns */
--- 232,238 -----
prconr(fp, type, x)
FILEP fp;
int type;
+ #ifndef GFLOAT
double x;
{
/* non-portable cheat to preserve bit patterns */
***************
*** 226,231
fprintf(fp, "\t.long\t0x%X,0x%X\n", cheat.xl[0], cheat.xl[1]);
i = SZDOUBLE;
}
if(fp == initfile)
i_offset += i;
else
--- 252,274 -----
fprintf(fp, "\t.long\t0x%X,0x%X\n", cheat.xl[0], cheat.xl[1]);
i = SZDOUBLE;
}
+ #else GFLOAT
+ /* This assumes two longs make a double */
+ long *x;
+ {
+ register int i;
+
+ if(type == TYREAL)
+ {
+ fprintf(fp, "\t.long\t0x%X\n", *x );
+ i = SZFLOAT;
+ }
+ else
+ {
+ fprintf(fp, "\t.long\t0x%X,0x%X\n", *x, *(x+1) );
+ i = SZDOUBLE;
+ }
+ #endif GFLOAT
if(fp == initfile)
i_offset += i;
else
***************
*** 369,374
else if (type == TYSHORT)
p2pass("\ttstw\tr0");
else
p2pass("\ttstd\tr0");
p2pi("\tjlss\tL%d", neg);
p2pi("\tjeql\tL%d", zer);
--- 412,418 -----
else if (type == TYSHORT)
p2pass("\ttstw\tr0");
else
+ #ifndef GFLOAT
p2pass("\ttstd\tr0");
#else GFLOAT
p2pass("\ttstg\tr0");
***************
*** 370,375
p2pass("\ttstw\tr0");
else
p2pass("\ttstd\tr0");
p2pi("\tjlss\tL%d", neg);
p2pi("\tjeql\tL%d", zer);
p2pi("\tjbr\tL%d", pos);
--- 414,422 -----
else
#ifndef GFLOAT
p2pass("\ttstd\tr0");
+ #else GFLOAT
+ p2pass("\ttstg\tr0");
+ #endif GFLOAT
p2pi("\tjlss\tL%d", neg);
p2pi("\tjeql\tL%d", zer);
p2pi("\tjbr\tL%d", pos);
SHAR_EOF
chmod +x 'vax.c.diff'
if test -f 'Makefile.diff'
then
echo shar: over-writing existing file "'Makefile.diff'"
fi
cat << \SHAR_EOF > 'Makefile.diff'
*** ../f77/src/f77pass1/Makefile.orig Tue Oct 29 15:16:19 1985
--- ../f77/src/f77pass1/Makefile Tue Oct 29 15:23:17 1985
***************
*** 2,8
#
CFLAGS = -O -DHERE=VAX -DTARGET=VAX -DFAMILY=PCC -DUCBVAXASM -DUCBPASS2 \
! -I../../include
DEST = $(DESTROOT)/usr/lib
--- 2,8 -----
#
CFLAGS = -O -DHERE=VAX -DTARGET=VAX -DFAMILY=PCC -DUCBVAXASM -DUCBPASS2 \
! -DGFLOAT -I../../include
DEST = $(DESTROOT)/usr/lib
SHAR_EOF
chmod +x 'Makefile.diff'
if test -f 'conv.h.diff'
then
echo shar: over-writing existing file "'conv.h.diff'"
fi
cat << \SHAR_EOF > 'conv.h.diff'
*** ../f77/src/f77pass1/conv.h.orig Tue Oct 29 15:15:46 1985
--- ../f77/src/f77pass1/conv.h Tue Oct 29 15:22:26 1985
***************
*** 20,25
#define MINWORD -32768
typedef
struct Dreal
{
unsigned fract1: 7;
--- 20,26 -----
#define MINWORD -32768
typedef
+ #ifndef GFLOAT
struct Dreal
{
unsigned fract1: 7;
***************
*** 24,29
{
unsigned fract1: 7;
unsigned exp: 8;
unsigned sign: 1;
unsigned fract2: 16;
unsigned fract3: 16;
--- 25,36 -----
{
unsigned fract1: 7;
unsigned exp: 8;
+ #else GFLOAT
+ struct Greal
+ {
+ unsigned fract1: 4;
+ unsigned exp: 11;
+ #endif GFLOAT
unsigned sign: 1;
unsigned fract2: 16;
unsigned fract3: 16;
***************
*** 29,34
unsigned fract3: 16;
unsigned fract4: 16;
}
dreal;
typedef
--- 36,42 -----
unsigned fract3: 16;
unsigned fract4: 16;
}
+ #ifndef GFLOAT
dreal;
#else GFLOAT
greal;
***************
*** 30,35
unsigned fract4: 16;
}
dreal;
typedef
struct Quad
--- 38,46 -----
}
#ifndef GFLOAT
dreal;
+ #else GFLOAT
+ greal;
+ #endif GFLOAT
typedef
struct Quad
***************
*** 40,45
quad;
typedef
union RealValue
{
double d;
--- 51,69 -----
quad;
typedef
+ #ifdef GFLOAT
+ struct Freal
+ {
+ unsigned fract1: 7;
+ unsigned exp: 8;
+ unsigned sign: 1;
+ unsigned fract2: 16;
+ unsigned fract3: 16;
+ unsigned fract4: 16;
+ }
+ freal;
+ typedef
+ #endif GFLOAT
union RealValue
{
double d;
***************
*** 44,49
{
double d;
quad q;
dreal f;
}
realvalue;
--- 68,74 -----
{
double d;
quad q;
+ #ifndef GFLOAT
dreal f;
#else GFLOAT
freal f;
***************
*** 45,49
double d;
quad q;
dreal f;
}
realvalue;
--- 70,78 -----
quad q;
#ifndef GFLOAT
dreal f;
+ #else GFLOAT
+ freal f;
+ greal g;
+ #endif GFLOAT
}
realvalue;
SHAR_EOF
chmod +x 'conv.h.diff'
chdir ..
chdir ..
chdir ..
if test -f 'modf.s'
then
echo shar: over-writing existing file "'modf.s'"
fi
cat << \SHAR_EOF > 'modf.s'
/* modf.s 4.1 83/06/27 */
/*
NOTE (Apr. 1985): wrtfmt.o calls ecvt in libc.a which calls modf.
This is a modified source that works only for G-format.
*/
/*
* double modf (value, iptr)
* double value, *iptr;
*
* Modf returns the fractional part of "value",
* and stores the integer part indirectly through "iptr".
*/
/* #include "DEFS.h" */
#define ENTRY(x) .globl _/**/x; .align 2; _/**/x: .word 0
ENTRY(modf)
emodg 4(ap),$0,$0g1.0,r2,r0
jvs 1f # integer overflow
cvtlg r2,*12(ap)
ret
1:
subg3 r0,4(ap),*12(ap)
ret
SHAR_EOF
chmod +x 'modf.s'
if test -f 'NOTE'
then
echo shar: over-writing existing file "'NOTE'"
fi
cat << \SHAR_EOF > 'NOTE'
NOTE (UW, Apr. 1985): wrtfmt.o calls ecvt in libc.a which calls modf.
Modf must be replaced by a version corrected for G-format uVaxes.
A source that works is included in this directory.
The f77 built-in functions (sin(x), etc) use the C math library and
are subject to the bugs in it. As a beginning, re-compile sin.c
without optimization.
SHAR_EOF
chmod +x 'NOTE'
if test ! -d 'libU77'
then
mkdir 'libU77'
fi
cd 'libU77'
if test -f 'dtime_.c.diff'
then
echo shar: over-writing existing file "'dtime_.c.diff'"
fi
cat << \SHAR_EOF > 'dtime_.c.diff'
29a30,34
> #ifdef GFLOAT
> union { double d;
> float r[2];
> } res;
> #endif GFLOAT
35a41,44
> #ifdef GFLOAT
> res.r[0] = (dt->usrtime + dt->systime);
> return( res.d );
> #else GFLOAT
36a46
> #endif GFLOAT
SHAR_EOF
chmod +x 'dtime_.c.diff'
if test -f 'Makefile.diff'
then
echo shar: over-writing existing file "'Makefile.diff'"
fi
cat << \SHAR_EOF > 'Makefile.diff'
6c6
< CFLAGS = -O
---
> CFLAGS = -O -DGFLOAT
SHAR_EOF
chmod +x 'Makefile.diff'
chdir ..
if test ! -d 'f77.gfloat'
then
mkdir 'f77.gfloat'
fi
cd 'f77.gfloat'
if test -f 'Makefile'
then
echo shar: over-writing existing file "'Makefile'"
fi
cat << \SHAR_EOF > 'Makefile'
PROGRAMS = f77 f77pass1 f1 f2 fpr fsplit libF77.a libI66.a libI77.a \
libU77.a modf.o
install: $(PROGRAMS)
@echo Installing f77 in /usr/bin
install f77 /usr/bin
@echo Installing f77pass1 in /usr/lib
install f77pass1 /usr/lib
@echo Installing f1 in /lib
@install f1 /lib
@echo Installing f2 in /lib
@install f2 /lib
@echo Installing fpr in /usr/ucb
@install fpr /usr/ucb
@echo Installing fsplit in /usr/ucb
@install fsplit /usr/ucb
@echo Installing libF77.a in /usr/lib
install -m 644 libF77.a /usr/lib
ranlib /usr/lib/libF77.a
@echo Installing libI77.a in /usr/lib
install -m 644 libI77.a /usr/lib
ranlib /usr/lib/libI77.a
@echo Installing libU77.a in /usr/lib
install -m 644 libU77.a /usr/lib
ranlib /usr/lib/libU77.a
@echo Installing libI66.a in /usr/lib
install -m 644 libI66.a /usr/lib
@echo Fixing modf.o in /lib/libc.a
mv modf.o /lib
ar r /lib/libc.a /lib/modf.o
ranlib /lib/libc.a
rm /lib/modf.o
collect:
cp /usr/bin/f77 .
cp /usr/lib/f77pass1 .
cp /lib/f1 .
cp /lib/f2 .
cp /usr/ucb/fpr .
cp /usr/ucb/fsplit .
cp /usr/lib/libF77.a .
cp /usr/lib/libI77.a .
cp /usr/lib/libU77.a .
cp /usr/lib/libI66.a .
ar x /lib/libc.a modf.o
SHAR_EOF
chmod +x 'Makefile'
if test -f 'READ_ME'
then
echo shar: over-writing existing file "'READ_ME'"
fi
cat << \SHAR_EOF > 'READ_ME'
This directory contains the modified executable code and libraries
for f77 to run on a G-float Vax, such as the majority of early microvaxes.
It also contains a modified modf.o for /lib/libc.a, which contains a
bug in Ultrix 1.0.
1. Log on or su as root, and copy this directory to the G-format machine.
2. Type make install from this directory.
3. Stand well back.
4. NOTE that the contents of this directory will be moved to the
appropriate places, and will no longer exist here.
5. NOTE ALSO that the f77 built-in math functions access the C math
library, and the bugs therein.
SHAR_EOF
chmod +x 'READ_ME'
chdir ..
if test -f 'tog.p'
then
echo shar: over-writing existing file "'tog.p'"
fi
cat << \SHAR_EOF > 'tog.p'
program torig( input, output );
{ This Pascal program will convert #ifdef GFLOAT files to
pure g-float files. There is no pretense of efficiency.}
const buflen=133;
type bufstr=packed array[1..buflen] of char;
var
buf: bufstr;
linlen: integer;
procedure rdbuf;
begin
linlen := 0;
if not eof then while not eoln do begin
linlen := linlen+1;
read( buf[linlen] )
end;
if not eof then readln
end;
procedure wrtbuf;
begin
if linlen=0 then writeln
else writeln( buf:linlen )
end;
function match( strng: bufstr; len: integer ): boolean;
var
ok: boolean;
i: integer;
begin
i := 1;
ok := true;
while ok and (i<=len) do begin
ok := (strng[i]=buf[i]);
i := i+1
end;
match := ok
end;
begin { torig }
while not eof do begin
rdbuf;
if match('#ifdef GFLOAT',13) then
repeat
rdbuf;
if match('#else GFLOAT',12) then
repeat rdbuf until match('#endif GFLOAT',13)
else if not match('#endif GFLOAT',13) then wrtbuf
until match('#endif GFLOAT',13)
else if match('#ifndef GFLOAT',14) then
repeat
rdbuf;
if match('#else GFLOAT',12) then begin
rdbuf;
while not match('#endif GFLOAT',13) do begin
wrtbuf;
rdbuf
end
end
until match('#endif GFLOAT',13)
else wrtbuf
end
end.
SHAR_EOF
chmod +x 'tog.p'
chdir ..
# End of shell archive
exit 0