aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1996-05-07 15:11:47 -0600
committerJeff Law <law@gcc.gnu.org>1996-05-07 15:11:47 -0600
commit3fb9e749791211cb3df74e5ae929579a29bb6861 (patch)
tree3c0182c8718b2bd3906b636fd0e89a11f464680f /gcc
parentfabdc32d072ff720c1afb2ef673060b50dcf8755 (diff)
downloadgcc-3fb9e749791211cb3df74e5ae929579a29bb6861.zip
gcc-3fb9e749791211cb3df74e5ae929579a29bb6861.tar.gz
gcc-3fb9e749791211cb3df74e5ae929579a29bb6861.tar.bz2
h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int))) is a valid U operand if...
* h8300/h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int))) is a valid U operand if SYMBOL_REF_FLAG is set on the SYMBOL_REF. * h8300/h8300.md (memory btst patterns): New patterns. From-SVN: r11954
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/h8300/h8300.h7
-rw-r--r--gcc/config/h8300/h8300.md27
2 files changed, 33 insertions, 1 deletions
diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h
index 6bad73e..069797f 100644
--- a/gcc/config/h8300/h8300.h
+++ b/gcc/config/h8300/h8300.h
@@ -791,7 +791,12 @@ struct rtx_def *function_arg();
|| (GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == REG \
&& REG_OK_FOR_BASE_P (XEXP (OP, 0))) \
|| (GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == SYMBOL_REF \
- && SYMBOL_REF_FLAG (XEXP (OP, 0))))
+ && SYMBOL_REF_FLAG (XEXP (OP, 0))) \
+ || (GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == CONST \
+ && GET_CODE (XEXP (XEXP (OP, 0), 0)) == PLUS \
+ && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 0)) == SYMBOL_REF \
+ && SYMBOL_REF_FLAG (XEXP (XEXP (XEXP (OP, 0), 0), 0)) \
+ && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 1)) == CONST_INT))
#define EXTRA_CONSTRAINT(OP, C) \
((C) == 'U' ? OK_FOR_U (OP) : 0)
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index be2fb15..059a91f 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -453,6 +453,33 @@
;; ----------------------------------------------------------------------
(define_insn ""
+ [(set (cc0) (zero_extract:QI (match_operand:QI 0 "memory_operand" "U")
+ (const_int 1)
+ (match_operand:QI 1 "const_int_operand" "n")))]
+ ""
+ "btst %Z1,%R0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "set_zn_c0")])
+
+(define_insn ""
+ [(set (cc0) (zero_extract:HI (match_operand:QI 0 "memory_operand" "U")
+ (const_int 1)
+ (match_operand:QI 1 "const_int_operand" "n")))]
+ ""
+ "btst %Z1,%Y0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "set_zn_c0")])
+
+(define_insn ""
+ [(set (cc0) (zero_extract:SI (match_operand:QI 0 "memory_operand" "U")
+ (const_int 1)
+ (match_operand:QI 1 "const_int_operand" "n")))]
+ ""
+ "btst %Z1,%Y0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "set_zn_c0")])
+
+(define_insn ""
[(set (cc0) (zero_extract:QI (match_operand:HI 0 "register_operand" "r")
(const_int 1)
(match_operand:HI 1 "const_int_operand" "n")))]