+++ /dev/null
-This fixes PR21419 by checking that read-only expressions are not given
-as outputs for an asm statement. The gimplifier was already performed
-consistency tests on asm statements, so this looked like a good place to
-make this check.
-
---- gcc/gcc/gimplify.c 14 Sep 2005 06:59:10 -0000
-+++ gcc/gcc/gimplify.c 25 Sep 2005 12:32:41 -0000
-@@ -3543,6 +3543,12 @@ gimplify_asm_expr (tree *expr_p, tree *p
- parse_output_constraint (&constraint, i, 0, 0,
- &allows_mem, &allows_reg, &is_inout);
-
-+ if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (link))))
-+ {
-+ error ("invalid lvalue in asm output %d", i);
-+ ret = GS_ERROR;
-+ }
-+
- if (!allows_reg && allows_mem)
- lang_hooks.mark_addressable (TREE_VALUE (link));
-
+++ /dev/null
---- gcc-4.1/gcc/config/i386/i386.md 2005-09-06 10:53:06.000000000 +0200
-+++ gcc-4.1/gcc/config/i386/i386.md 2005-09-26 10:42:34.581839750 +0200
-@@ -16475,9 +16475,9 @@
- DONE;
- })
-
--(define_insn_and_split "*fist<mode>2_1"
-- [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "=m,?r")
-- (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "f,f")]
-+(define_insn_and_split "*fistdi2_1"
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
-+ (unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
- UNSPEC_FIST))]
- "TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations
-@@ -16487,17 +16487,17 @@
- [(const_int 0)]
- {
- if (memory_operand (operands[0], VOIDmode))
-- emit_insn (gen_fist<mode>2 (operands[0], operands[1]));
-+ emit_insn (gen_fistdi2 (operands[0], operands[1]));
- else
- {
-- operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
-- emit_insn (gen_fist<mode>2_with_temp (operands[0], operands[1],
-- operands[2]));
-+ operands[2] = assign_386_stack_local (DImode, SLOT_TEMP);
-+ emit_insn (gen_fistdi2_with_temp (operands[0], operands[1],
-+ operands[2]));
- }
- DONE;
- }
- [(set_attr "type" "fpspc")
-- (set_attr "mode" "<MODE>")])
-+ (set_attr "mode" "DI")])
-
- (define_insn "fistdi2"
- [(set (match_operand:DI 0 "memory_operand" "=m")
-@@ -16545,6 +16545,25 @@
- (clobber (match_dup 3))])]
- "")
-
-+(define_insn_and_split "*fist<mode>2_1"
-+ [(set (match_operand:X87MODEI12 0 "register_operand" "=r")
-+ (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
-+ UNSPEC_FIST))]
-+ "TARGET_USE_FANCY_MATH_387
-+ && flag_unsafe_math_optimizations
-+ && !(reload_completed || reload_in_progress)"
-+ "#"
-+ "&& 1"
-+ [(const_int 0)]
-+{
-+ operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
-+ emit_insn (gen_fist<mode>2_with_temp (operands[0], operands[1],
-+ operands[2]));
-+ DONE;
-+}
-+ [(set_attr "type" "fpspc")
-+ (set_attr "mode" "<MODE>")])
-+
- (define_insn "fist<mode>2"
- [(set (match_operand:X87MODEI12 0 "memory_operand" "=m")
- (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
-@@ -16556,10 +16575,10 @@
- (set_attr "mode" "<MODE>")])
-
- (define_insn "fist<mode>2_with_temp"
-- [(set (match_operand:X87MODEI12 0 "nonimmediate_operand" "=m,?r")
-- (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f,f")]
-+ [(set (match_operand:X87MODEI12 0 "register_operand" "=r")
-+ (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
- UNSPEC_FIST))
-- (clobber (match_operand:X87MODEI12 2 "memory_operand" "=m,m"))]
-+ (clobber (match_operand:X87MODEI12 2 "memory_operand" "=m"))]
- "TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations"
- "#"