summaryrefslogtreecommitdiff
path: root/gcc/config/mn10300
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-22 20:13:40 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-22 20:13:40 +0000
commit6d3b67b9b05cf6e1f80c9c94ab7c179b009fd6c4 (patch)
tree3280e03cc0bdf9fbb11cb763e00b6ad9dd9f6461 /gcc/config/mn10300
parent7299cb0fd804a3791a8c955498e325a5c22ce854 (diff)
downloadgcc-6d3b67b9b05cf6e1f80c9c94ab7c179b009fd6c4.tar.gz
* config/mn10300/mn10300.md: Revert 2003-09-17's patch.
(andsi3): Set attr cc to set_zn when using shifts or adds. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71663 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/mn10300')
-rw-r--r--gcc/config/mn10300/mn10300.md59
1 files changed, 47 insertions, 12 deletions
diff --git a/gcc/config/mn10300/mn10300.md b/gcc/config/mn10300/mn10300.md
index 46a8ff125cd..6f4517149c4 100644
--- a/gcc/config/mn10300/mn10300.md
+++ b/gcc/config/mn10300/mn10300.md
@@ -1224,7 +1224,22 @@
return \"and %1,%0\";
return \"and %2,%0\";
}"
- [(set_attr "cc" "none_0hit,set_zn,set_zn")])
+ [(set (attr "cc")
+ (cond
+ [
+ (eq (symbol_ref "which_alternative") (const_int 0)
+ ) (const_string "none_0hit")
+ (ne (symbol_ref "GET_CODE (operands[2]) == CONST_INT
+ && (INTVAL (operands[2]) == 0x7fffffff
+ || INTVAL (operands[2]) == 0x3fffffff
+ || INTVAL (operands[2]) == 0x1fffffff
+ || INTVAL (operands[2]) == 0x0fffffff
+ || INTVAL (operands[2]) == 0x0ffffffe
+ || INTVAL (operands[2]) == 0xfffffffc
+ || INTVAL (operands[2]) == 0xfffffff8
+ || INTVAL (operands[2]) == 0xfffffff0)")
+ (const_int 0)) (const_string "set_zn")
+ ] (const_string "set_znv")))])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=dx,dx")
@@ -1255,7 +1270,27 @@
return \"lsr 4,%0\;asl2 %0\;asl2 %0\";
return \"and %2,%0\";
}"
- [(set_attr "cc" "none_0hit,set_zn")])
+ [(set (attr "cc")
+ (cond
+ [
+ (eq (symbol_ref "which_alternative") (const_int 0)
+ ) (const_string "none_0hit")
+ ;; Shifts don't set the V flag, but bitwise operations clear
+ ;; it (which correctly reflects the absence of overflow in a
+ ;; compare-with-zero that might follow). As for the
+ ;; 0xfffffffe case, the add may overflow, so we can't use the
+ ;; V flag.
+ (ne (symbol_ref "GET_CODE (operands[2]) == CONST_INT
+ && (INTVAL (operands[2]) == 0x7fffffff
+ || INTVAL (operands[2]) == 0x3fffffff
+ || INTVAL (operands[2]) == 0x1fffffff
+ || INTVAL (operands[2]) == 0x0fffffff
+ || INTVAL (operands[2]) == 0x0ffffffe
+ || INTVAL (operands[2]) == 0xfffffffc
+ || INTVAL (operands[2]) == 0xfffffff8
+ || INTVAL (operands[2]) == 0xfffffff0)")
+ (const_int 0)) (const_string "set_zn")
+ ] (const_string "set_znv")))])
;; ----------------------------------------------------------------------
;; OR INSTRUCTIONS
@@ -1291,7 +1326,7 @@
return \"or %1,%0\";
return \"or %2,%0\";
}"
- [(set_attr "cc" "set_zn")])
+ [(set_attr "cc" "set_znv")])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=dx")
@@ -1299,7 +1334,7 @@
(match_operand:SI 2 "nonmemory_operand" "dxi")))]
""
"or %2,%0"
- [(set_attr "cc" "set_zn")])
+ [(set_attr "cc" "set_znv")])
;; ----------------------------------------------------------------------
;; XOR INSTRUCTIONS
@@ -1335,7 +1370,7 @@
return \"xor %1,%0\";
return \"xor %2,%0\";
}"
- [(set_attr "cc" "set_zn")])
+ [(set_attr "cc" "set_znv")])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=dx")
@@ -1343,7 +1378,7 @@
(match_operand:SI 2 "nonmemory_operand" "dxi")))]
""
"xor %2,%0"
- [(set_attr "cc" "set_zn")])
+ [(set_attr "cc" "set_znv")])
;; ----------------------------------------------------------------------
;; NOT INSTRUCTIONS
@@ -1360,14 +1395,14 @@
(not:SI (match_operand:SI 1 "register_operand" "0,0")))]
"TARGET_AM33"
"not %0"
- [(set_attr "cc" "set_zn")])
+ [(set_attr "cc" "set_znv")])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=dx")
(not:SI (match_operand:SI 1 "register_operand" "0")))]
""
"not %0"
- [(set_attr "cc" "set_zn")])
+ [(set_attr "cc" "set_znv")])
;; -----------------------------------------------------------------
;; BIT FIELDS
@@ -1404,7 +1439,7 @@
"@
bclr %N1,%A0
and %1,%0"
- [(set_attr "cc" "clobber,set_zn")])
+ [(set_attr "cc" "clobber,set_znv")])
(define_insn ""
[(set (match_operand:QI 0 "memory_operand" "=R,T")
@@ -1426,7 +1461,7 @@
"@
bset %U1,%A0
or %1,%0"
- [(set_attr "cc" "clobber,set_zn")])
+ [(set_attr "cc" "clobber,set_znv")])
(define_expand "iorqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
@@ -1449,7 +1484,7 @@
bset %U2,%A0
bset %2,%0
or %2,%0"
- [(set_attr "cc" "clobber,clobber,set_zn")])
+ [(set_attr "cc" "clobber,clobber,set_znv")])
(define_insn ""
[(set (match_operand:QI 0 "nonimmediate_operand" "=R,T,d")
@@ -1464,7 +1499,7 @@
bset %U2,%A0
bset %2,%0
or %2,%0"
- [(set_attr "cc" "clobber,clobber,set_zn")])
+ [(set_attr "cc" "clobber,clobber,set_znv")])
(define_insn ""
[(set (cc0)