This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[committed] Fix PA doubleword carry/borrow patterns
- From: John David Anglin <dave at hiauly1 dot hia dot nrc dot ca>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 30 Dec 2010 16:49:33 -0500
- Subject: [committed] Fix PA doubleword carry/borrow patterns
- Reply-to: John David Anglin <dave dot anglin at nrc-cnrc dot gc dot ca>
A problem with the binutils assembler was recently found on the PA.
For some instructions like "add", the default PA 2.0 overflow condition
was incorrectly set, causing the 64-bit carry/borrow bit in the PSW to
be set on overflow instead of the 32-bit bit. With this fixed, we must
be careful to ensure that "add" instructions have a 64-bit condition
when 64-bit overflow is desired.
The attached change fixes a few insn patterns that lack a 64-bit
condition.
Tested on hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11. Committed
to trunk.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
2010-12-30 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* config/pa/pa.md: Add ",*" condition to 64-bit add/subtract boolean
patterns.
Index: config/pa/pa.md
===================================================================
--- config/pa/pa.md (revision 168236)
+++ config/pa/pa.md (working copy)
@@ -811,7 +811,7 @@
(match_operand:DI 3 "arith11_operand" "rI"))
(match_operand:DI 1 "register_operand" "r")))]
"TARGET_64BIT"
- "sub%I3 %3,%2,%%r0\;add,dc %%r0,%1,%0"
+ "sub%I3,* %3,%2,%%r0\;add,dc %%r0,%1,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -833,7 +833,7 @@
(match_operand:DI 3 "register_operand" "r"))
(match_operand:DI 1 "register_operand" "r")))]
"TARGET_64BIT"
- "sub %2,%3,%%r0\;add,dc %%r0,%1,%0"
+ "sub,* %2,%3,%%r0\;add,dc %%r0,%1,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -856,7 +856,7 @@
(match_operand:DI 3 "int11_operand" "I"))
(match_operand:DI 1 "register_operand" "r")))]
"TARGET_64BIT"
- "addi %k3,%2,%%r0\;add,dc %%r0,%1,%0"
+ "addi,* %k3,%2,%%r0\;add,dc %%r0,%1,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -902,7 +902,7 @@
(gtu:DI (match_operand:DI 2 "register_operand" "r")
(match_operand:DI 3 "arith11_operand" "rI"))))]
"TARGET_64BIT"
- "sub%I3 %3,%2,%%r0\;sub,db %1,%%r0,%0"
+ "sub%I3,* %3,%2,%%r0\;sub,db %1,%%r0,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -924,7 +924,7 @@
(match_operand:DI 3 "arith11_operand" "rI")))
(match_operand:DI 4 "register_operand" "r")))]
"TARGET_64BIT"
- "sub%I3 %3,%2,%%r0\;sub,db %1,%4,%0"
+ "sub%I3,* %3,%2,%%r0\;sub,db %1,%4,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -946,7 +946,7 @@
(ltu:DI (match_operand:DI 2 "register_operand" "r")
(match_operand:DI 3 "register_operand" "r"))))]
"TARGET_64BIT"
- "sub %2,%3,%%r0\;sub,db %1,%%r0,%0"
+ "sub,* %2,%3,%%r0\;sub,db %1,%%r0,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -968,7 +968,7 @@
(match_operand:DI 3 "register_operand" "r")))
(match_operand:DI 4 "register_operand" "r")))]
"TARGET_64BIT"
- "sub %2,%3,%%r0\;sub,db %1,%4,%0"
+ "sub,* %2,%3,%%r0\;sub,db %1,%4,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -991,7 +991,7 @@
(leu:DI (match_operand:DI 2 "register_operand" "r")
(match_operand:DI 3 "int11_operand" "I"))))]
"TARGET_64BIT"
- "addi %k3,%2,%%r0\;sub,db %1,%%r0,%0"
+ "addi,* %k3,%2,%%r0\;sub,db %1,%%r0,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])
@@ -1013,7 +1013,7 @@
(match_operand:DI 3 "int11_operand" "I")))
(match_operand:DI 4 "register_operand" "r")))]
"TARGET_64BIT"
- "addi %k3,%2,%%r0\;sub,db %1,%4,%0"
+ "addi,* %k3,%2,%%r0\;sub,db %1,%4,%0"
[(set_attr "type" "binary")
(set_attr "length" "8")])