aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2002-11-29 16:10:21 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2002-11-29 16:10:21 +0000
commitd23dff51b29c5bb2f2e1480ccc1064440e872fa7 (patch)
treefe85f4416aef856faf789ba958f509e05ad28372
parenta1cd285d75847b6cad6c80992763198123a09428 (diff)
downloadgcc-d23dff51b29c5bb2f2e1480ccc1064440e872fa7.zip
gcc-d23dff51b29c5bb2f2e1480ccc1064440e872fa7.tar.gz
gcc-d23dff51b29c5bb2f2e1480ccc1064440e872fa7.tar.bz2
h8300.md (an anonymous pattern): Give an internal name *tst_extzv_bitqi_1_n.
* config/h8300/h8300.md (an anonymous pattern): Give an internal name *tst_extzv_bitqi_1_n. Accept bit_operand instead of bit_memory_operand. Do not accept bit tests with the MSB. (*tst_extzv_memqi_1_n): New. From-SVN: r59636
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/h8300/h8300.md24
2 files changed, 29 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 935e4b3..8d4f86c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2002-11-29 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (an anonymous pattern): Give an
+ internal name *tst_extzv_bitqi_1_n.
+ Accept bit_operand instead of bit_memory_operand.
+ Do not accept bit tests with the MSB.
+ (*tst_extzv_memqi_1_n): New.
+
2002-11-28 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.c (h8300_eightbit_constant_address_p):
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index 182e9f1..5da3397 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -580,15 +580,33 @@
[(set_attr "length" "2")
(set_attr "cc" "set_zn")])
-(define_insn ""
- [(set (cc0) (zero_extract:SI (match_operand:QI 0 "bit_memory_operand" "r,U")
+(define_insn "*tst_extzv_bitqi_1_n"
+ [(set (cc0) (zero_extract:SI (match_operand:QI 0 "bit_operand" "r,U")
(const_int 1)
(match_operand 1 "const_int_operand" "n,n")))]
- "TARGET_H8300H || TARGET_H8300S"
+ "(TARGET_H8300H || TARGET_H8300S)
+ && INTVAL (operands[1]) != 7"
"btst %Z1,%Y0"
[(set_attr "length" "2,8")
(set_attr "cc" "set_zn,set_zn")])
+(define_insn_and_split "*tst_extzv_memqi_1_n"
+ [(set (cc0) (zero_extract:SI (match_operand:QI 0 "memory_operand" "m")
+ (const_int 1)
+ (match_operand 1 "const_int_operand" "n")))
+ (clobber (match_scratch:QI 2 "=&r"))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !EXTRA_CONSTRAINT (operands[0], 'U')
+ && INTVAL (operands[1]) != 7"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 2)
+ (match_dup 0))
+ (set (cc0) (zero_extract:SI (match_dup 2)
+ (const_int 1)
+ (match_dup 1)))]
+ "")
+
(define_insn ""
[(set (cc0) (zero_extract:SI (match_operand:SI 0 "register_operand" "r")
(const_int 1)