aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Meissner <meissner@gcc.gnu.org>1996-01-15 21:53:30 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1996-01-15 21:53:30 +0000
commit0f6453027705a3eeafe0a6b521624a75d7a7f58b (patch)
tree0668811a125606741b42987607beb4276bcf0d4c /gcc
parent968ad7cfe21dc8a7b57fe5f23a95dd7fb2ee582a (diff)
downloadgcc-0f6453027705a3eeafe0a6b521624a75d7a7f58b.zip
gcc-0f6453027705a3eeafe0a6b521624a75d7a7f58b.tar.gz
gcc-0f6453027705a3eeafe0a6b521624a75d7a7f58b.tar.bz2
Fix little endian adddi3/subdi3
From-SVN: r10997
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.md40
1 files changed, 19 insertions, 21 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index b2dec1a..8920c8a 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -3623,11 +3623,17 @@
(plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,0,0")
(match_operand:DI 2 "reg_or_short_operand" "r,I,r,I")))]
"! TARGET_POWERPC64"
- "@
- {a|addc} %L0,%L1,%L2\;{ae|adde} %0,%1,%2
- {ai|addic} %L0,%L1,%2\;{a%G2e|add%G2e} %0,%1
- {a|addc} %L0,%L1,%L2\;{ae|adde} %0,%1,%2
- {ai|addic} %L0,%L1,%2\;{a%G2e|add%G2e} %0,%1"
+ "*
+{
+ if (WORDS_BIG_ENDIAN)
+ return (GET_CODE (operands[2])) != CONST_INT
+ ? \"{a|addc} %L0,%L1,%L2\;{ae|adde} %0,%1,%2\"
+ : \"{ai|addic} %L0,%L1,%2\;{a%G2e|add%G2e} %0,%1\";
+ else
+ return (GET_CODE (operands[2])) != CONST_INT
+ ? \"{a|addc} %0,%1,%2\;{ae|adde} %L0,%L1,%L2\"
+ : \"{ai|addic} %0,%1,%2\;{a%G2e|add%G2e} %L0,%L1\";
+}"
[(set_attr "length" "8")])
(define_insn "subddi3"
@@ -3635,24 +3641,16 @@
(minus:DI (match_operand:DI 1 "reg_or_short_operand" "r,I,0,r,I")
(match_operand:DI 2 "gpc_reg_operand" "r,r,r,0,0")))]
"TARGET_POWER && ! TARGET_POWERPC64"
- "@
- {sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1
- {sfi|subfic} %L0,%L2,%1\;{sf%G1e|subf%G1e} %0,%2
- {sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1
- {sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1
- {sfi|subfic} %L0,%L2,%1\;{sf%G1e|subf%G1e} %0,%2"
- [(set_attr "length" "8")])
-
-(define_insn ""
- [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r,r")
- (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r,0,r")
- (match_operand:DI 2 "gpc_reg_operand" "r,r,0")))]
- "! TARGET_POWER && ! TARGET_POWERPC64"
"*
{
- return (WORDS_BIG_ENDIAN)
- ? \"{sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1\"
- : \"{sf|subfc} %0,%2,%1\;{sfe|subfe} %L0,%L2,%L1\";
+ if (WORDS_BIG_ENDIAN)
+ return (GET_CODE (operands[1]) != CONST_INT)
+ ? \"{sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1\"
+ : \"{sfi|subfic} %L0,%L2,%1\;{sf%G1e|subf%G1e} %0,%2\";
+ else
+ return (GET_CODE (operands[1]) != CONST_INT)
+ ? \"{sf|subfc} %0,%2,%1\;{sfe|subfe} %L0,%L2,%L1\"
+ : \"{sfi|subfic} %0,%2,%1\;{sf%G1e|subf%G1e} %L0,%L2\";
}"
[(set_attr "length" "8")])