[parisc-linux] GCC and quad-precision floating point

Carlos O'Donell carlos@baldric.uwo.ca
Wed, 4 Sep 2002 15:15:17 -0400


> I have just implemented some fixes and changed the long double size
> to 128 bits on the hppa64 GCC ports.  For parisc-linux, the long double
> support should be 128 bits (both for 32 and 64 bit) but we are currently
> stuck at 64 bits because we are missing a bunch of quad library calls:
> 
> _U_Qfadd, _U_Qfsub, _U_Qfmpy, _U_Qfdiv, _U_Qfneg, _U_Qfsqrt, _U_Qfabs,
> _U_Qfmin, _U_Qfmax, _U_Qfcnvff_sgl_to_quad, _U_Qfcnvff_dbl_to_quad,
> _U_Qfcnvff_quad_to_sgl, _U_Qfcnvff_quad_to_dbl, _U_Qfcnvxf_sgl_to_quad,
> _U_Qfcnvxf_dbl_to_quad, _U_Qfcnvfxt_quad_to_sgl, _U_Qfcnvfxt_quad_to_usgl,
> _U_Qfcnvfxt_quad_to_udbl, _U_Qfcnvfxt_quad_to_dbl, _U_Qfeq, _U_Qfne,
> _U_Qfgt, _U_Qfge, _U_Qflt, _U_Qfle.
> 
> There are probably some more for unordered comparisons.
> 
> Any chance that someone with contacts inside HP, might be able to
> obtain the source code for these functions?  They are really part
> of the ABI.
> 
> While it's relatively straightforward to implement these using the
> quad-precision instructions in the PA 2.0 architecture for the 64-bit
> port, it's non trivial to implement them for earlier architectures
> using the 32-bit port.
> 
> Dave

Randolph and I were discussing borrowing from gmp to implement some of 
these for the earlier 32-bit processors. Thought it seems that this may
break the HPUX compatibility? 

gmp seems to have support for:

	add, sub, multiply, div, neg, sqrt, abs, min, max
	equals, not-equals, greater-than, greather-than-or-equal,
	less-than, less-than-or-equal.	

The 'cnv' functions need to be addressed:

	single -> quad
	double -> quad
	quad   -> single
	quad   -> double
	quad   -> unsigned single
	quad   -> unsigned double

Under certain conditions of float-float, float-fixed, float-fixed&truncate.
This will have to follow the HPUX convention?

c.