summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-11 19:54:21 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-11 19:54:21 +0000
commit4cf2e75ae3ccfa7c84636bf39b2c75501e0c191c (patch)
treee19d43ece2ec358a73d960388cac15834180e0cc /gcc
parent839b65568b6fde05c7bc3e68ea69b2253dc417d3 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/config/i386/i386.h11
-rw-r--r--gcc/config/i386/i386.md2
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.