From 1d1df0df43b306fef358d1d3f1378b593a75d5a9 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sat, 11 Sep 2004 21:54:21 +0200 Subject: [PATCH] i386.h (MODE_NEEDED): Calls need UNINITIALIZED mode; add comment. * 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. From-SVN: r87365 --- gcc/ChangeLog | 4 ++++ gcc/config/i386/i386.h | 11 ++++++++--- gcc/config/i386/i386.md | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7429882c3c1..e0c197a9cd7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2004-09-11 Jan Hubicka + * 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. diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 4c4ce5843db..e32684885c4 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -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 \ diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f08c85a4d44..8ec7719b660 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -431,7 +431,7 @@ ;; 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. -- 2.30.2