Commit 17ad8a3b by Jeffrey A Law Committed by Jeff Law

mn10200.c (indirect_memory_operand): Delete unused function.

        * mn10200.c (indirect_memory_operand): Delete unused function.
        * mn10200.h (EXTRA_CONSTRAINT): Handle 'R'.
        * mn10200.md (bset, bclr insns): Handle output in a reg too.

From-SVN: r16169
parent e16b49d3
Fri Oct 24 17:40:34 1997 Jeffrey A Law (law@cygnus.com)
* mn10200.c (indirect_memory_operand): Delete unused function.
* mn10200.h (EXTRA_CONSTRAINT): Handle 'R'.
* mn10200.md (bset, bclr insns): Handle output in a reg too.
Fri Oct 24 15:54:57 1997 Richard Henderson <rth@cygnus.com> Fri Oct 24 15:54:57 1997 Richard Henderson <rth@cygnus.com>
* alpha.md (call patterns): Revert Oct 16 change; if we are to elide * alpha.md (call patterns): Revert Oct 16 change; if we are to elide
......
...@@ -864,16 +864,6 @@ call_address_operand (op, mode) ...@@ -864,16 +864,6 @@ call_address_operand (op, mode)
return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == REG); return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == REG);
} }
/* Return true if OP is an indirect memory operand, the "bset" and "bclr"
insns use this predicate. */
int
indirect_memory_operand (op, mode)
rtx op;
enum machine_mode mode;
{
return (GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) == REG);
}
/* Return true if OP is a memory operand with a constant address. /* Return true if OP is a memory operand with a constant address.
A special PSImode move pattern uses this predicate. */ A special PSImode move pattern uses this predicate. */
int int
......
...@@ -614,10 +614,15 @@ extern struct rtx_def *function_arg(); ...@@ -614,10 +614,15 @@ extern struct rtx_def *function_arg();
#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X) #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
/* Extra constraints. */ /* Extra constraints. */
#define OK_FOR_R(OP) \
(GET_CODE (OP) == MEM \
&& GET_MODE (OP) == QImode \
&& REG_P (XEXP (OP, 0)))
/* Q is used for sp + <something> in the {zero,sign}_extendpsisi2 patterns. */ /* Q is used for sp + <something> in the {zero,sign}_extendpsisi2 patterns. */
#define EXTRA_CONSTRAINT(OP, C) \ #define EXTRA_CONSTRAINT(OP, C) \
((C) == 'S' ? GET_CODE (OP) == SYMBOL_REF : \ ((C) == 'R' ? OK_FOR_R (OP) : \
(C) == 'S' ? GET_CODE (OP) == SYMBOL_REF : \
(C) == 'Q' ? GET_CODE (OP) == PLUS : 0) (C) == 'Q' ? GET_CODE (OP) == PLUS : 0)
/* Maximum number of registers that can appear in a valid memory address. */ /* Maximum number of registers that can appear in a valid memory address. */
......
...@@ -650,54 +650,66 @@ ...@@ -650,54 +650,66 @@
;; BIT INSTRUCTIONS ;; BIT INSTRUCTIONS
;; ----------------------------------------------------------------- ;; -----------------------------------------------------------------
;; When clearing a set of bits in memory, we load the inverted bitmask into ;; These clears a constant set of bits in memory or in a register.
;; a register, then use bclr. ;; We must support register destinations to make reload happy.
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "indirect_memory_operand" "") [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI (subreg:QI
(and:HI (subreg:HI (match_dup 0) 0) (and:HI (subreg:HI (match_dup 0) 0)
(match_operand 1 "const_int_operand" "")) 0)) (match_operand 1 "const_int_operand" "")) 0))
(clobber (match_scratch:HI 2 "=&d"))] (clobber (match_scratch:HI 2 "=&d,X"))]
"" ""
"mov %N1,%2\;bclr %2,%0" "@
mov %N1,%2\;bclr %2,%0
and %1,%0"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
;; These clear a non-constant set of bits in memory. ;; This clears a variable set of bits in memory or in a register.
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "indirect_memory_operand" "") [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI (subreg:QI
(and:HI (subreg:HI (match_dup 0) 0) (and:HI (subreg:HI (match_dup 0) 0)
(not:HI (match_operand:HI 1 "general_operand" "d"))) 0))] (not:HI (match_operand:HI 1 "general_operand" "d,d"))) 0))
(clobber (match_scratch:HI 2 "=X,&d"))]
"" ""
"bclr %1,%0" "@
bclr %1,%0
mov %1,%2\;not %2\;and %2,%0"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "indirect_memory_operand" "") [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI (subreg:QI
(and:HI (not:HI (match_operand:HI 1 "general_operand" "d")) (and:HI (not:HI (match_operand:HI 1 "general_operand" "d,d"))
(subreg:HI (match_dup 0) 0)) 0))] (subreg:HI (match_dup 0) 0)) 0))
(clobber (match_scratch:HI 2 "=X,&d"))]
"" ""
"bclr %1,%0" "@
bclr %1,%0
mov %1,%2\;not %2\;and %2,%0"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
;; These set bits in memory. ;; These set bits in memory.
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "indirect_memory_operand" "") [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI (subreg:QI
(ior:HI (subreg:HI (match_dup 0) 0) (ior:HI (subreg:HI (match_dup 0) 0)
(match_operand:HI 1 "general_operand" "d")) 0))] (match_operand:HI 1 "general_operand" "d,d")) 0))]
"" ""
"bset %1,%0" "@
bset %1,%0
or %1,%0"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "indirect_memory_operand" "") [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI (subreg:QI
(ior:HI (match_operand:HI 1 "general_operand" "d") (ior:HI (match_operand:HI 1 "general_operand" "d,d")
(subreg:HI (match_dup 0) 0)) 0))] (subreg:HI (match_dup 0) 0)) 0))]
"" ""
"bset %1,%0" "@
bset %1,%0
or %1,%0"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
;; Not any shorter/faster than using cmp, but it might save a ;; Not any shorter/faster than using cmp, but it might save a
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment