This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, MIPS] -mno-float odds and ends


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 <sandra@codesourcery.com> Julian Brown <julian@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;		  \

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]