diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-11 19:54:21 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-11 19:54:21 +0000 |
commit | 4cf2e75ae3ccfa7c84636bf39b2c75501e0c191c (patch) | |
tree | e19d43ece2ec358a73d960388cac15834180e0cc /gcc | |
parent | 839b65568b6fde05c7bc3e68ea69b2253dc417d3 (diff) | |
download | gcc-4cf2e75ae3ccfa7c84636bf39b2c75501e0c191c.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87365 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 11 | ||||
-rw-r--r-- | 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 <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. 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. |