Patchwork [MIPS] -mno-float odds and ends

login
register
mail settings
Submitter Sandra Loosemore
Date July 30, 2012, 5:04 p.m.
Message ID <5016BE96.9000106@codesourcery.com>
Download mbox | patch
Permalink /patch/174064/
State New
Headers show

Comments

Sandra Loosemore - July 30, 2012, 5:04 p.m.
The MIPS back end has an option -mno-float that is supported by 
bare-metal configs using the SDE library.  However, this option is not 
properly documented in the manual, and MIPS_ARCH_FLOAT_SPEC doesn't know 
about it as one of the explicit floating-point configuration changes 
that should override architecture defaults.  This patch addresses both 
problems.  OK to commit?

-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.
Richard Sandiford - July 30, 2012, 7:38 p.m.
Sandra Loosemore <sandra@codesourcery.com> writes:
> The MIPS back end has an option -mno-float that is supported by 
> bare-metal configs using the SDE library.  However, this option is not 
> properly documented in the manual, and MIPS_ARCH_FLOAT_SPEC doesn't know 
> about it as one of the explicit floating-point configuration changes 
> that should override architecture defaults.  This patch addresses both 
> problems.  OK to commit?

OK, you're touching a sore spot here, but...

> +@item -mno-float
> +@opindex mno-float
> +Prevents the use of all floating-point operations.  This option is presently 
> +supported only by some bare-metal MIPS configurations.

...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.

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.

The mips.h part is OK though, thanks.  Feel free to apply it separately
if that's more convenient than keeping the patch together.

Richard

Patch

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,11 @@  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
+Prevents the use of all floating-point operations.  This option is presently 
+supported only by some bare-metal MIPS configurations.
+
 @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;		  \