+2016-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/78791
+ * config/i386/i386.h (enum ix86_stack_slot): Add SLOT_STV_TEMP.
+ * config/i386/i386.c (dimode_scalar_chain::make_vector_copies,
+ dimode_scalar_chain::convert_reg): Use SLOT_STV_TEMP instead of
+ SLOT_TEMP.
+
2016-12-14 Uros Bizjak <ubizjak@gmail.com>
PR target/59874
}
else
{
- rtx tmp = assign_386_stack_local (DImode, SLOT_TEMP);
+ rtx tmp = assign_386_stack_local (DImode, SLOT_STV_TEMP);
emit_move_insn (adjust_address (tmp, SImode, 0),
gen_rtx_SUBREG (SImode, reg, 0));
emit_move_insn (adjust_address (tmp, SImode, 4),
}
else
{
- rtx tmp = assign_386_stack_local (DImode, SLOT_TEMP);
+ rtx tmp = assign_386_stack_local (DImode, SLOT_STV_TEMP);
emit_move_insn (tmp, reg);
emit_move_insn (gen_rtx_SUBREG (SImode, scopy, 0),
adjust_address (tmp, SImode, 0));
SLOT_CW_FLOOR,
SLOT_CW_CEIL,
SLOT_CW_MASK_PM,
+ SLOT_STV_TEMP,
MAX_386_STACK_LOCALS
};
+2016-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/78791
+ * gcc.c-torture/execute/pr78791.c: New test.
+ * gcc.target/i386/pr78791.c: New test.
+
2016-12-14 Marek Polacek <polacek@redhat.com>
PR c++/72775
--- /dev/null
+/* PR target/78791 */
+
+__attribute__((used, noinline, noclone)) unsigned long long
+foo (unsigned long long x, unsigned long long y, unsigned long long z)
+{
+ unsigned long long a = x / y;
+ unsigned long long b = x % y;
+ a |= z;
+ b ^= z;
+ return a + b;
+}
+
+int
+main ()
+{
+ if (foo (64, 7, 0) != 10 || foo (28, 3, 2) != 14)
+ __builtin_abort ();
+ return 0;
+}
--- /dev/null
+/* PR target/78791 */
+/* { dg-do run { target sse2_runtime } } */
+/* { dg-options "-O2 -msse2" } */
+
+#include "../../gcc.c-torture/execute/pr78791.c"