aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md42
2 files changed, 35 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6f153d1..2b1cd26 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Tue Nov 30 15:20:52 MET 1999 Jan Hubicka <hubicka@freesoft.cz>
+
+ * i386.md (neg?f2_if): Split "r" and "f" to separate alternatives.
+ (abs?f2_if): Likewise.
+
1999-11-30 Alex Samuel <samuel@codesourcery.com>
* ggc.h (ggc_test_and_set_mark): New macro.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index e7f9a14..99ba4ad 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -4968,9 +4968,12 @@
"TARGET_80387"
"ix86_expand_unary_operator (NEG, SFmode, operands); DONE;")
+;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+;; to itself.
(define_insn "*negsf2_if"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=frm")
- (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0")))
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f")
+ (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, SFmode, operands)"
"#")
@@ -5020,9 +5023,12 @@
"TARGET_80387"
"ix86_expand_unary_operator (NEG, DFmode, operands); DONE;")
+;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+;; to itself.
(define_insn "*negdf2_if"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=frm")
- (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0")))
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f")
+ (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, DFmode, operands)"
"#")
@@ -5053,9 +5059,12 @@
"TARGET_80387"
"ix86_expand_unary_operator (NEG, XFmode, operands); DONE;")
+;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+;; to itself.
(define_insn "*negxf2_if"
- [(set (match_operand:XF 0 "nonimmediate_operand" "=frm")
- (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0")))
+ [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
+ (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, XFmode, operands)"
"#")
@@ -5142,9 +5151,12 @@
"TARGET_80387"
"ix86_expand_unary_operator (ABS, SFmode, operands); DONE;")
+;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+;; to itself.
(define_insn "*abssf2_if"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=frm")
- (abs:SF (match_operand:SF 1 "nonimmediate_operand" "0")))
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f")
+ (abs:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands)"
"#")
@@ -5194,9 +5206,12 @@
"TARGET_80387"
"ix86_expand_unary_operator (ABS, DFmode, operands); DONE;")
+;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+;; to itself.
(define_insn "*absdf2_if"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=frm")
- (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0")))
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f")
+ (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, DFmode, operands)"
"#")
@@ -5227,9 +5242,12 @@
"TARGET_80387"
"ix86_expand_unary_operator (ABS, XFmode, operands); DONE;")
+;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+;; to itself.
(define_insn "*absxf2_if"
- [(set (match_operand:XF 0 "nonimmediate_operand" "=frm")
- (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0")))
+ [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
+ (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, XFmode, operands)"
"#")