diff options
author | Jeff Law <law@gcc.gnu.org> | 1996-05-07 15:11:47 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1996-05-07 15:11:47 -0600 |
commit | 3fb9e749791211cb3df74e5ae929579a29bb6861 (patch) | |
tree | 3c0182c8718b2bd3906b636fd0e89a11f464680f /gcc | |
parent | fabdc32d072ff720c1afb2ef673060b50dcf8755 (diff) | |
download | gcc-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.h | 7 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 27 |
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")))] |