On Wed, 2009-11-18 at 19:19 +0100, Rainer Orth wrote: > I've recently looked into what it takes to support decimal float on > additional platforms (like Solaris, IRIX, and Tru64 UNIX in my case). > I've found no documentation, and while I could figure out some things > myself, I'd like to get some advice before continuing down that road. > > I found that --enable-decimal-float alone is not enough. One at least > needs to add config/t-dfprules to config.gcc, too. In addition, the > platform <target>_scalar_mode_supported_p function needs to be augmented > accordingly. (I haven't tried this yet; it's just from code > inspection.)
The target ABI needs to define how to handle the decimal32/64/128 data types. The compiler backend needs to implement that ABI for argument passing and function results, and needs to define which registers to use for those types. > Even if this works, I now think this won't be enough and probably not > even remotely useful (if only to pass parts of the testsuite) without > libc support for the new *printf/*scanf formats, which certainly won't > be added on legacy platforms like IRIX and Tru64 UNIX, and even on > Solaris probably won't show up until DFP is fully standardized. Much of the support for decimal floating types is in libraries that are outside the scope of the GCC project. This includes not just I/O but math functions and support for floating-point exceptions and rounding modes. That support is provided by the libdfp project hosted in the EGLIBC repository. libdfp currently supports only GNU/Linux targets, but that could be changed. Janis