diff options
Diffstat (limited to 'gcc/config/i386/i386.md')
| -rw-r--r-- | gcc/config/i386/i386.md | 42 |
1 files changed, 30 insertions, 12 deletions
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)" "#") |
