diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d6e7dffa476..074b8da44df 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2000-07-10 Chandrakala Chavva + + * flags.h : Add new variable flag_single_precision_constant. + * toplev.c (display_help) : Add -fsingle-precision-constant option. + (flag_single_precision_constant): New. + * c-lex.c (yylex): Convert floating point constant to single + precision constant. + * invoke.texi : Add documentation for this new option. + 2000-07-10 Gabriel Dos Reis * diagnostic.c (output_octal): Second parameter is unsigned. diff --git a/gcc/c-lex.c b/gcc/c-lex.c index f720a3f9b47..e38b8070ed6 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -1176,6 +1176,8 @@ parse_float (data) else { errno = 0; + if (flag_single_precision_constant) + args->type = float_type_node; if (args->base == 16) args->value = REAL_VALUE_HTOF (copy, TYPE_MODE (args->type)); else diff --git a/gcc/flags.h b/gcc/flags.h index 3c543bc5bcd..3dc5c7ec788 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -379,6 +379,11 @@ extern int flag_schedule_speculative_load_dangerous; by a cheaper branch, on a count register. */ extern int flag_branch_on_count_reg; +/* This option is set to 1 on -fsingle-precision-constant option which is + used to convert the floating point constants to single precision + constants. */ + +extern int flag_single_precision_constant; /* Nonzero means put things in delayed-branch slots if supported. */ diff --git a/gcc/invoke.texi b/gcc/invoke.texi index f7643ed1106..e1f2503b9ce 100644 --- a/gcc/invoke.texi +++ b/gcc/invoke.texi @@ -99,7 +99,7 @@ in the following sections. -ansi -fstd -fallow-single-precision -fcond-mismatch -fno-asm -fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char -funsigned-bitfields -funsigned-char -fwritable-strings --traditional -traditional-cpp -trigraphs +-traditional -traditional-cpp -trigraphs -fsingle-precision-constant @end smallexample @item C++ Language Options @@ -178,7 +178,7 @@ in the following sections. -fregmove -frerun-cse-after-loop -frerun-loop-opt -freduce-all-givs -fschedule-insns -fschedule-insns2 -fssa -fstrength-reduce -fstrict-aliasing -fthread-jumps -funroll-all-loops --funroll-loops +-funroll-loops -O -O0 -O1 -O2 -O3 -Os @end smallexample @@ -2897,6 +2897,10 @@ the flow graph is translated back from SSA form. (Currently, no SSA-based optimizations are implemented, but converting into and out of SSA form is not an invariant operation, and generated code may differ.) +@item -fsingle-precision-constant +Treat floating point constant as single precision constant instead of +implicitly converting it to double precision constant. + @end table @node Preprocessor Options diff --git a/gcc/toplev.c b/gcc/toplev.c index d02f8406b38..098a2ec3991 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -744,6 +744,8 @@ int flag_schedule_speculative = 1; int flag_schedule_speculative_load = 0; int flag_schedule_speculative_load_dangerous = 0; +int flag_single_precision_constant; + /* flag_on_branch_count_reg means try to replace add-1,compare,branch tupple by a cheaper branch, on a count register. */ int flag_branch_on_count_reg; @@ -1103,7 +1105,9 @@ lang_independent_options f_options[] = {"bounded-pointers", &flag_bounded_pointers, 1, "Compile pointers as triples: value, base & end" }, {"bounds-check", &flag_bounds_check, 1, - "Generate code to check bounds before dereferencing pointers and arrays" } + "Generate code to check bounds before dereferencing pointers and arrays" }, + {"single-precision-constant", &flag_single_precision_constant, 1, + "Convert floating point constant to single precision constant"} }; #define NUM_ELEM(a) (sizeof (a) / sizeof ((a)[0]))