RFA: new command line switch for MIPS assembler
Nick Clifton
nickc@cygnus.com
Fri Jul 14 14:12:00 GMT 2000
Hi Ulf,
: > * doc/c-mips.texi (MIPS Opts): Document the new command line
: > switch.
:
: I don't understand from reading the documentation whether the option
: is enabled or disabled by default. It's just confusing to me.
OK - I have rewritten the documentation to try to make this clearer.
: >
: > + static int enable_float_construction = 1;
: > +
: > /* Non-zero if any .set noreorder directives were used. */
: >
: > static int mips_any_noreorder;
:
: A comment wouldn't hurt here. I'd prefer an option with the name
: mips_no_float_construction and then default to not set, but that's
: just a personal opinion.
OK, all three of these things have been done.
: > + #define OPTION_CONSTRUCT_FLOATS (OPTION_MD_BASE + 39)
: > + {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
: > +
: > + #define OPTION_NO_CONSTRUCT_FLOATS (OPTION_MD_BASE + 40)
: > + {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
: > +
: > #define OPTION_CALL_SHARED (OPTION_MD_BASE + 7)
: > #define OPTION_NON_SHARED (OPTION_MD_BASE + 8)
: > #define OPTION_XGOT (OPTION_MD_BASE + 19)
:
: I don't think reusing the magic number for another option is a good
: idea, or am I missing something?
Oops - my bad. I imported patch from an old branch which did not have
a magic number 39...
Revised patch below. Is it OK to apply ?
Cheers
Nick
2000-07-14 Nick Clifton <nickc@cygnus.com>
* config/tc-mips.c (mips_disable_float_construction): New
static variable. Set to true if doubles should not be
constructed by loading two single width fp registers with
halves of the value.
(mips_ip): Test mips_disable_float_construction.
(md_longopts): Add command line switches --construct-floats
and --no-construct-floats.
(md_parse_option): Parse new command line options.
(md_show_usage): Describe new command line options.
* doc/c-mips.texi: Document new command line options.
Index: config/tc-mips.c
===================================================================
RCS file: /cvs/src//src/gas/config/tc-mips.c,v
retrieving revision 1.21
diff -p -r1.21 tc-mips.c
*** tc-mips.c 2000/07/07 16:58:24 1.21
--- tc-mips.c 2000/07/14 21:05:09
*************** static int mips_big_got;
*** 313,318 ****
--- 313,326 ----
instructions. */
static int mips_trap;
+ /* 1 if double width floating point constants should not be constructed
+ by a assembling two single width halves into two single width floating
+ point registers which just happen to alias the double width destination
+ register. On some architectures this aliasing can be disabled by a bit
+ in the status register, and the settin gof this bit cannot be determined
+ automatically at assemble time. */
+ static int mips_disable_float_construction;
+
/* Non-zero if any .set noreorder directives were used. */
static int mips_any_noreorder;
*************** mips_ip (str, ip)
*** 7601,7606 ****
--- 7609,7615 ----
imm_expr.X_add_number = bfd_getb32 (temp);
}
else if (length > 4
+ && ! mips_disble_float_construction
&& ((temp[0] == 0 && temp[1] == 0)
|| (temp[2] == 0 && temp[3] == 0))
&& ((temp[4] == 0 && temp[5] == 0)
*************** struct option md_longopts[] = {
*** 8866,8871 ****
--- 8875,8886 ----
#define OPTION_NO_M7000_HILO_FIX (OPTION_MD_BASE + 40)
{"no-fix-7000", no_argument, NULL, OPTION_NO_M7000_HILO_FIX},
+ #define OPTION_CONSTRUCT_FLOATS (OPTION_MD_BASE + 41)
+ {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
+
+ #define OPTION_NO_CONSTRUCT_FLOATS (OPTION_MD_BASE + 42)
+ {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
+
#define OPTION_CALL_SHARED (OPTION_MD_BASE + 7)
#define OPTION_NON_SHARED (OPTION_MD_BASE + 8)
#define OPTION_XGOT (OPTION_MD_BASE + 19)
*************** md_parse_option (c, arg)
*** 8896,8901 ****
--- 8911,8924 ----
{
switch (c)
{
+ case OPTION_CONSTRUCT_FLOATS:
+ mips_disable_float_construction = 0;
+ break;
+
+ case OPTION_NO_CONSTRUCT_FLOATS:
+ mips_disable_float_construction = 1;
+ break;
+
case OPTION_TRAP:
mips_trap = 1;
break;
*************** MIPS options:\n\
*** 9338,9343 ****
--- 9361,9367 ----
fprintf(stream, _("\
-O0 remove unneeded NOPs, do not swap branches\n\
-O remove unneeded NOPs and swap branches\n\
+ --[no-]construct-floats [dis]allow floating point values to be constructed\n\
--trap, --no-break trap exception on div by 0 and mult overflow\n\
--break, --no-trap break exception on div by 0 and mult overflow\n"));
#ifdef OBJ_ELF
Index: doc/c-mips.texi
===================================================================
RCS file: /cvs/src//src/gas/doc/c-mips.texi,v
retrieving revision 1.5
diff -p -r1.5 c-mips.texi
*** c-mips.texi 2000/06/16 19:11:27 1.5
--- c-mips.texi 2000/07/14 21:05:09
*************** other assemblers, which use it to turn o
*** 151,156 ****
--- 151,171 ----
@sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the
@sc{gnu} assembler itself never runs the C preprocessor.
+ @item --construct-floats
+ @itemx --no-construct-floats
+ @cindex --construct-floats
+ @cindex --no-construct-floats
+ The @code{--no-construct-floats} option disables the construction of
+ double width floating point constants by loading the two halves of the
+ value into the two single width floating point registers that make up
+ the double width register. This feature is useful if the processor
+ support the FR bit in its status register, and this bit is known (by
+ the programmer) to be set. This bit prevents the aliasing of the double
+ width register by the single width registers.
+
+ By default @code {--construct-floats} is selected, allowing construction
+ of these floating point constants.
+
@item --trap
@itemx --no-break
@c FIXME! (1) reflect these options (next item too) in option summaries;
More information about the Binutils
mailing list