On 07/30/2012 01:38 PM, Richard Sandiford wrote:
...unfortunately, it doesn't prevent the use floating-point operations. That's why it's such a bad option. The only difference from the compiler proper's point of view between -msoft-float and -mno-float is that they define different preprocessor macros. The onus is instead on the programmer to avoid writing anything that might tempt the compiler into using floating-point operations. If the user gets it wrong, they get (at best) a link-time error rather than a compile-time error. I think we should document it that way. E.g. something like: @item -mno-float @opindex mno-float Equivalent to @option{-msoft-float}, but asserts that the user is trying to avoid all floating-point operations. This option is presently supported only by some bare-metal MIPS configurations, where it selects a special set of libraries that lack all floating-point support (including, for example, the floating-point @code{printf} formats). If code compiled with @code{-mno-float} accidentally contains floating-point operations, it is likely to suffer a link-time or run-time failure. but you're better at the wordsmithing than I am.
OK, I've gone with a slightly tweaked version of your wording.
Perhaps we should document the __mips_no_float preprocessor macro too, since that's how things like printf() know that they don't need the floating-point stuff.
Hmmm, I don't think that's necessary, at least as part of this patch; we don't document the related __mips_hard_float or __mips_soft_float preprocessor definitions, either.
The mips.h part is OK though, thanks. Feel free to apply it separately if that's more convenient than keeping the patch together.
I've checked in the attached version of the patch. Thanks for the speedy review! :-)
-Sandra 2012-07-30 Sandra Loosemore <san...@codesourcery.com> Julian Brown <jul...@codesourcery.com> gcc/ * doc/invoke.texi (MIPS Options): Document -mno-float. * config/mips/mips.h (MIPS_ARCH_FLOAT_SPEC): Make it know about -mno-float.
Index: gcc/doc/invoke.texi =================================================================== --- gcc/doc/invoke.texi (revision 189950) +++ gcc/doc/invoke.texi (working copy) @@ -733,7 +733,8 @@ Objective-C and Objective-C++ Dialects}. -mabi=@var{abi} -mabicalls -mno-abicalls @gol -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot @gol -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float @gol --msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol +-mno-float -msingle-float -mdouble-float @gol +-mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol -mmcu -mmno-mcu @gol -mfpu=@var{fpu-type} @gol -msmartmips -mno-smartmips @gol @@ -15633,6 +15634,18 @@ Use floating-point coprocessor instructi Do not use floating-point coprocessor instructions. Implement floating-point calculations using library calls instead. +@item -mno-float +@opindex mno-float +Equivalent to @option{-msoft-float}, but additionally asserts that the +program being compiled does not perform any floating-point operations. +This option is presently supported only by some bare-metal MIPS +configurations, where it may select a special set of libraries +that lack all floating-point support (including, for example, the +floating-point @code{printf} formats). +If code compiled with @code{-mno-float} accidentally contains +floating-point operations, it is likely to suffer a link-time +or run-time failure. + @item -msingle-float @opindex msingle-float Assume that the floating-point coprocessor only supports single-precision Index: gcc/config/mips/mips.h =================================================================== --- gcc/config/mips/mips.h (revision 189950) +++ gcc/config/mips/mips.h (working copy) @@ -713,7 +713,7 @@ struct mips_cpu_info { link-compatible. */ #define MIPS_ARCH_FLOAT_SPEC \ - "%{mhard-float|msoft-float|march=mips*:; \ + "%{mhard-float|msoft-float|mno-float|march=mips*:; \ march=vr41*|march=m4k|march=4k*|march=24kc|march=24kec \ |march=34kc|march=74kc|march=1004kc|march=5kc \ |march=octeon|march=xlr: -msoft-float; \