aboutsummaryrefslogtreecommitdiff
path: root/gcc/reg-stack.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@freesoft.cz>1999-11-25 13:53:44 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>1999-11-25 12:53:44 +0000
commitcaa6ec8dc54d2661eb3e7557a4f555867190d63b (patch)
treea4bf9453290b36a89996ebbd090aa3032a51500f /gcc/reg-stack.c
parent58dbe05f3a8d62d7c5e9982c9caf35ec4d403595 (diff)
downloadgcc-caa6ec8dc54d2661eb3e7557a4f555867190d63b.zip
gcc-caa6ec8dc54d2661eb3e7557a4f555867190d63b.tar.gz
gcc-caa6ec8dc54d2661eb3e7557a4f555867190d63b.tar.bz2
reg-stack.c (subst_stack_regs_pat): Swap operands in commutative operations when needed.
* reg-stack.c (subst_stack_regs_pat): Swap operands in commutative operations when needed. * i386.md (fop_?f_comm): New. (fop_?f_1): Do not accept commutative operands. From-SVN: r30664
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r--gcc/reg-stack.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index 98b8778..aa2b010 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -1631,6 +1631,16 @@ subst_stack_regs_pat (insn, regstack, pat)
SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
replace_reg (dest, get_hard_regnum (regstack, *dest));
}
+
+ /* Keep operand 1 maching with destination. */
+ if (GET_RTX_CLASS (GET_CODE (pat_src)) == 'c'
+ && REG_P (*src1) && REG_P (*src2)
+ && REGNO (*src1) != REGNO (*dest))
+ {
+ rtx tmp = *src1;
+ *src1 = *src2;
+ *src2 = tmp;
+ }
break;
case UNSPEC: