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
This commit is contained in:
Jan Hubicka 2004-09-11 21:54:21 +02:00 committed by Jan Hubicka
parent f43329a5ae
commit 1d1df0df43
3 changed files with 13 additions and 4 deletions

View File

@ -1,5 +1,9 @@
2004-09-11 Jan Hubicka <jh@suse.cz> 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. * profile.c (BB_TO_GCOV_INDEX): move more to the front.
(output_location): Break out from .... (output_location): Break out from ....
(branch_prob): ... here; handle gcov output on trees. (branch_prob): ... here; handle gcov output on trees.

View 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 `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
return an integer value not larger than the corresponding element return an integer value not larger than the corresponding element
in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 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) \ #define MODE_NEEDED(ENTITY, I) \
(GET_CODE (I) == CALL_INSN \ (GET_CODE (I) == CALL_INSN \
|| (GET_CODE (I) == INSN && (asm_noperands (PATTERN (I)) >= 0 \ || (GET_CODE (I) == INSN && (asm_noperands (PATTERN (I)) >= 0 \
|| GET_CODE (PATTERN (I)) == ASM_INPUT))\ || GET_CODE (PATTERN (I)) == ASM_INPUT))\
? I387_CW_ANY \ ? I387_CW_UNINITIALIZED \
: recog_memoized (I) < 0 \ : recog_memoized (I) < 0 \
? I387_CW_ANY \ ? I387_CW_ANY \
: get_attr_i387_cw (I)) : get_attr_i387_cw (I))
@ -2981,7 +2986,7 @@ extern rtx ix86_compare_op1; /* operand 1 for comparisons */
are to be inserted. */ are to be inserted. */
#define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE) \ #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), \ ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1), \
assign_386_stack_local (HImode, 2), \ assign_386_stack_local (HImode, 2), \
MODE), 0 \ MODE), 0 \

View File

@ -431,7 +431,7 @@
;; Defines rounding mode of an FP operation. ;; 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")) (const_string "any"))
;; Describe a user's asm statement. ;; Describe a user's asm statement.