2002-05-21 Jeffrey A Law <law@redhat.com>
+ * optabs.c (expand_binop): For double-word integer multiplies,
+ do not compute intermediate results into something that is
+ not a register (such as a SUBREG or MEM).
+
* i386.c (ix86_sched_reorder_ppro): Fix typo/thinko.
(ix86_sched_reorder): Make sure to initialize scheduling
data even when there's only one insn in the ready queue.
rtx temp = expand_binop (word_mode, binoptab, op0_low, op1_xhigh,
NULL_RTX, 0, OPTAB_DIRECT);
+ if (!REG_P (product_high))
+ product_high = force_reg (word_mode, product_high);
+
if (temp != 0)
temp = expand_binop (word_mode, add_optab, temp, product_high,
product_high, 0, next_methods);
if (temp != 0 && temp != product_high)
emit_move_insn (product_high, temp);
+ emit_move_insn (operand_subword (product, high, 1, mode), product_high);
+
if (temp != 0)
{
if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)