cc flag to prevent type conversion

chris at umcp-cs.UUCP chris at umcp-cs.UUCP
Sat Oct 15 19:21:42 AEST 1983


CC *almost* does floating point single precision multiplies in single
precision.

The following code fragment

	float f1, f2;
	double d;

	f1 = f1 * f2;

	d = f1 * f2;

generates, on 4.1BSD using pcc,

	mulf3	-8(fp),-4(fp),r0
	cvtfd	r0,r0
	cvtdf	r0,-4(fp)		# this is f1 = f1 * f2

	mulf3	-8(fp),-4(fp),r0
	cvtfd	r0,r0
	movd	r0,-16(fp)		# this is d = f1 * f2

The first is silly.  It *does the multiply in single precision* (hear
that Fortran fans?), but stupidly converts to double and then back to
float.  (The optimizer doesn't catch it either.)

However, the second is just plain *wrong*.  The multiply should have
been done in double precision!  The other way loses precision.

Anyone feel like hacking pcc guts?
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris at umcp-cs		ARPA:	chris.umcp-cs at UDel-Relay



More information about the Comp.lang.c mailing list