if (icode != CODE_FOR_nothing)
{
rtx_insn *last = get_last_insn ();
+ rtx from1 = from;
if (fmode != GET_MODE (from))
- from = convert_to_mode (fmode, from, 0);
+ from1 = convert_to_mode (fmode, from, 0);
if (must_trunc)
{
- rtx temp = gen_reg_rtx (GET_MODE (from));
- from = expand_unop (GET_MODE (from), ftrunc_optab, from,
- temp, 0);
+ rtx temp = gen_reg_rtx (GET_MODE (from1));
+ from1 = expand_unop (GET_MODE (from1), ftrunc_optab, from1,
+ temp, 0);
}
if (imode != GET_MODE (to))
target = gen_reg_rtx (imode);
- if (maybe_emit_unop_insn (icode, target, from,
+ if (maybe_emit_unop_insn (icode, target, from1,
doing_unsigned ? UNSIGNED_FIX : FIX))
{
if (target != to)
--- /dev/null
+/* { dg-do run { target { ia32 } } } */
+/* { dg-options "-Os -march=i686 -mfpmath=sse -msse2" } */
+
+#include<stdlib.h>
+int
+main (void)
+{
+ static volatile unsigned int ivin, ivout;
+ static volatile _Float16 fv1, fv2;
+ ivin = ((unsigned int)1);
+ fv1 = ((unsigned int)1);
+ fv2 = ivin;
+ ivout = fv2;
+ if (ivout != ((unsigned int)1))
+ abort ();
+
+ exit (0);
+}