OSDN Git Service

* i386.h (MODE_NEEDED): Calls need UNINITIALIZED mode; add comment.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Sep 2004 19:54:21 +0000 (19:54 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Sep 2004 19:54:21 +0000 (19:54 +0000)
(EMIT_MODE_SET): UNINITIALIZED mode needs no set.
* i386.md (i387_cw): Add 'uninitialized' mode.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87365 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.h
gcc/config/i386/i386.md

index 7429882..e0c197a 100644 (file)
@@ -1,5 +1,9 @@
 2004-09-11  Jan Hubicka  <jh@suse.cz>
 
+       * i386.h (MODE_NEEDED): Calls need UNINITIALIZED mode; add comment.
+       (EMIT_MODE_SET): UNINITIALIZED mode needs no set.
+       * i386.md (i387_cw): Add 'uninitialized' mode.
+
        * profile.c (BB_TO_GCOV_INDEX): move more to the front.
        (output_location): Break out from ....
        (branch_prob): ... here; handle gcov output on trees.
index 4c4ce58..e326848 100644 (file)
@@ -2960,13 +2960,18 @@ extern rtx ix86_compare_op1;    /* operand 1 for comparisons */
    `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
    return an integer value not larger than the corresponding element
    in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
-   must be switched into prior to the execution of INSN.  */
+   must be switched into prior to the execution of INSN. 
+   
+   The mode UNINITIALIZED is used to force re-load of possibly previously
+   stored control word after function call.  The mode ANY specify that
+   function has no requirements on the control word and make no changes
+   in the bits we are interested in.  */
 
 #define MODE_NEEDED(ENTITY, I)                                         \
   (GET_CODE (I) == CALL_INSN                                           \
    || (GET_CODE (I) == INSN && (asm_noperands (PATTERN (I)) >= 0       \
                                || GET_CODE (PATTERN (I)) == ASM_INPUT))\
-   ? I387_CW_ANY                                                       \
+   ? I387_CW_UNINITIALIZED                                             \
    : recog_memoized (I) < 0                                            \
    ? I387_CW_ANY                                                       \
    : get_attr_i387_cw (I))
@@ -2981,7 +2986,7 @@ extern rtx ix86_compare_op1;      /* operand 1 for comparisons */
    are to be inserted.  */
 
 #define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE)                    \
-  ((MODE) != I387_CW_ANY                                               \
+  ((MODE) != I387_CW_ANY && (MODE) != I387_CW_UNINITIALIZED            \
    ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1),  \
                                  assign_386_stack_local (HImode, 2),   \
                                  MODE), 0                              \
index f08c85a..8ec7719 100644 (file)
 
 ;; Defines rounding mode of an FP operation.
 
-(define_attr "i387_cw" "floor,ceil,trunc,mask_pm,any"
+(define_attr "i387_cw" "floor,ceil,trunc,mask_pm,uninitialized,any"
   (const_string "any"))
 
 ;; Describe a user's asm statement.