OSDN Git Service

* config/ns32k/ns32k.md: Give "*xxx" names to all unnamed insn's.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Jun 2002 17:45:15 +0000 (17:45 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Jun 2002 17:45:15 +0000 (17:45 +0000)
        (sCOND): Restrict operand class so that gcc knows how to reload them.
        (bitfield_set): Merge two unnamed insn's using alternatives.
        (call_value): Remove constraint on unused uperand.
        (udivmodhi4, udivmodsi4, udivmoddihi4_internal): Remove.
        (udivmoddiqi4_internal, udivmoddihi4, udivmoddiqi4): Remove.

        * longlong.h (count_trailing_zeros): Escape newline and beautify.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54788 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/ns32k/ns32k.md

index d8d89b0..53734ca 100644 (file)
@@ -1,3 +1,14 @@
+2002-06-19  Ian Dall  <ian@sibyl.beware.dropbear.id.au>
+
+       * config/ns32k/ns32k.md: Give "*xxx" names to all unnamed insn's.
+       (sCOND): Restrict operand class so that gcc knows how to reload them.
+       (bitfield_set): Merge two unnamed insn's using alternatives.
+       (call_value): Remove constraint on unused uperand.
+       (udivmodhi4, udivmodsi4, udivmoddihi4_internal): Remove.
+       (udivmoddiqi4_internal, udivmoddihi4, udivmoddiqi4): Remove.
+       * longlong.h (count_trailing_zeros): Escape newline and beautify.
+
 2002-06-19  Mark Mitchell  <mark@codesourcery.com>
 
        * Makefile.in (QMTEST_DIR): Simplify definition.
@@ -30,7 +41,7 @@
        (_cpp_replacement_text_len, _cpp_copy_replacement_text): New.
 
 2002-06-18  Hans-Peter Nilsson  <hp@axis.com>
-            Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+           Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * config/fp-bit.c (_fpmul_parts, _fpdiv_parts): Mark with
        attribute __always_inline__.
@@ -219,7 +230,7 @@ Sun Jun 16 22:16:10 CEST 2002  Jan Hubicka  <jh@suse.cz>
 
 2002-06-16  Richard Henderson  <rth@redhat.com>
 
-        * vax.md (casesi): Use emit_jump_insn.  Tidy expander pattern.
+       * vax.md (casesi): Use emit_jump_insn.  Tidy expander pattern.
 
 2002-06-16  Richard Henderson  <rth@redhat.com>
 
@@ -295,16 +306,16 @@ Sun Jun 16 22:16:10 CEST 2002  Jan Hubicka  <jh@suse.cz>
 
 2002-06-15  Aldy Hernandez  <aldyh@redhat.com>
 
-        * tm.texi (MEMBER_TYPE_FORCES_BLK): Document MODE argument.
+       * tm.texi (MEMBER_TYPE_FORCES_BLK): Document MODE argument.
 
-        * stor-layout.c (compute_record_mode): Remove check for
-        FUNCTION_ARG_REG_LITTLE_ENDIAN and VOIDmode when checking for
-        MEMBER_TYPE_FORCES_BLK.  Pass new mode field to
-        MEMBER_TYPE_FORCES_BLK.
+       * stor-layout.c (compute_record_mode): Remove check for
+       FUNCTION_ARG_REG_LITTLE_ENDIAN and VOIDmode when checking for
+       MEMBER_TYPE_FORCES_BLK.  Pass new mode field to
+       MEMBER_TYPE_FORCES_BLK.
 
-        * config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Same.
+       * config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Same.
 
-        * config/c4x/c4x.h (MEMBER_TYPE_FORCES_BLK): Same.
+       * config/c4x/c4x.h (MEMBER_TYPE_FORCES_BLK): Same.
 
 2002-06-14  Jeff Sturm  <jsturm@one-point.com>
 
index 6622df5..44db480 100644 (file)
   else return \"movd %1,%0\";
 }")
 
-(define_insn ""
+(define_insn "*movti"
   [(set (match_operand:TI 0 "memory_operand" "=m")
        (match_operand:TI 1 "memory_operand" "m"))]
   ""
 }")
 
 ;; This special case must precede movsi.
-(define_insn ""
+(define_insn "*ldsp"
   [(set (reg:SI 25)
        (match_operand:SI 0 "general_operand" "g"))]
   ""
   "truncld %1,%0")
 \f
 ;; Multiply-add instructions
-(define_insn ""
+(define_insn "*madddf"
   [(set (match_operand:DF 0 "nonimmediate_operand" "=v,v,lm")
        (plus:DF (mult:DF (match_operand:DF 1 "general_operand" "%lmF,0,0")
                          (match_operand:DF 2 "general_operand" "lmF,lmF,lmF"))
    polyl %2,%3
    mull %2,%0\;addl %3,%0")
 
-(define_insn ""
+(define_insn "*maddsf"
   [(set (match_operand:SF 0 "nonimmediate_operand" "=u,u,fm")
        (plus:SF (mult:SF (match_operand:SF 1 "general_operand" "%fmF,0,0")
                          (match_operand:SF 2 "general_operand" "fmF,fmF,fmF"))
 
 
 ;; Multiply-sub instructions
-(define_insn ""
+(define_insn "*msubdf"
   [(set (match_operand:DF 0 "nonimmediate_operand" "=v,lm")
        (minus:DF (mult:DF (match_operand:DF 1 "general_operand" "%lmF,0")
                          (match_operand:DF 2 "general_operand" "lmF,lmF"))
    negl %3,%0\;dotl %1,%2
    mull %2,%0\;subl %3,%0")
 
-(define_insn ""
+(define_insn "*msubsf"
   [(set (match_operand:SF 0 "nonimmediate_operand" "=u,fm")
        (minus:SF (mult:SF (match_operand:SF 1 "general_operand" "%fmF,0")
                          (match_operand:SF 2 "general_operand" "fmF,fmF"))
   "TARGET_32081"
   "addf %2,%0")
 
-(define_insn ""
+(define_insn "*add_to_sp"
   [(set (reg:SI 25)
        (plus:SI (reg:SI 25)
                 (match_operand:SI 0 "immediate_operand" "i")))]
   return \"adjspd %n0\";
 }")
 
-(define_insn ""
+(define_insn "*frame_addr"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
        (plus:SI (reg:SI 24)
                 (match_operand:SI 1 "immediate_operand" "i")))]
   "GET_CODE (operands[1]) == CONST_INT"
   "addr %c1(fp),%0")
 
-(define_insn ""
+(define_insn "*stack_addr"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
        (plus:SI (reg:SI 25)
                 (match_operand:SI 1 "immediate_operand" "i")))]
   return \"addw %2,%0\";
 }")
 
-(define_insn ""
+(define_insn "*addhi_strict_low3"
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
        (plus:HI (match_operand:HI 1 "general_operand" "0")
                 (match_operand:HI 2 "general_operand" "g")))]
   return \"addb %2,%0\";
 }")
 
-(define_insn ""
+(define_insn "*addqi_strict_low3"
   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
        (plus:QI (match_operand:QI 1 "general_operand" "0")
                 (match_operand:QI 2 "general_operand" "g")))]
   "TARGET_32081"
   "subf %2,%0")
 
-(define_insn ""
+(define_insn "*sub_from_sp"
   [(set (reg:SI 25)
        (minus:SI (reg:SI 25)
                  (match_operand:SI 0 "immediate_operand" "i")))]
   return \"subw %2,%0\";
 }")
 
-(define_insn ""
+(define_insn "*subhi_strict_low3"
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
        (minus:HI (match_operand:HI 1 "general_operand" "0")
                  (match_operand:HI 2 "general_operand" "g")))]
   return \"subb %2,%0\";
 }")
 
-(define_insn ""
+(define_insn "*subqi_strict_low3"
   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
        (minus:QI (match_operand:QI 1 "general_operand" "0")
                  (match_operand:QI 2 "general_operand" "g")))]
   ""
   "deid %2,%0")
 
-;; Part word variants. These seem to never be used at the moment (gcc
-;; 2.7.2.2). The code generation prefers to zero extend hi's and qi's
-;; and use signed div and mod. Keep these insns incase that changes.
-;; divmod should have an advantage when both div and mod are needed. However,
-;; divmod uses two registers, so maybe the compiler knows best.
-
-(define_expand "udivmodhi4"
-  [(parallel
-  [(set (match_operand:HI 0 "nonimmediate_operand" "")
-       (udiv:HI (match_operand:HI 1 "general_operand" "")
-                    (match_operand:HI 2 "general_operand" "")))
-   (set (match_operand:HI 3 "nonimmediate_operand" "")
-       (umod:HI (match_dup 1) (match_dup 2)))])]
-  ""
-  "
-{
-  rtx temp = gen_reg_rtx(DImode);
-  rtx insn, first, last;
-  first = emit_move_insn(gen_lowpart(HImode, temp), operands[1]);
-  emit_move_insn(gen_highpart (HImode, temp), const0_rtx);
-  operands[2] = force_reg(HImode, operands[2]);
-  emit_insn(gen_udivmoddihi4_internal(temp, temp, operands[2]));
-  last = emit_move_insn(temp, temp);
-  {
-    rtx divdi, moddi, divhi, modhi;
-    divhi = gen_rtx (UDIV, HImode, operands[1], operands[2]);
-    modhi = gen_rtx (UMOD, HImode, operands[1], operands[2]);
-    divdi = gen_rtx (ZERO_EXTEND, DImode, divhi);
-    moddi = gen_rtx (ZERO_EXTEND, DImode, modhi);
-    REG_NOTES (first) = gen_rtx (INSN_LIST, REG_LIBCALL, last,
-                                REG_NOTES (first));
-    REG_NOTES (last) = gen_rtx (INSN_LIST, REG_RETVAL, first,
-                                gen_rtx (EXPR_LIST, REG_EQUAL,
-                       gen_rtx(IOR, DImode, moddi,
-                               gen_rtx(ASHIFT, DImode, divdi, GEN_INT(32))),
-                       REG_NOTES (last)));
-  }
-
-  insn = emit_move_insn(operands[0], gen_highpart(HImode, temp));
-  insn = emit_move_insn(operands[3], gen_lowpart(HImode, temp));
-  DONE;
-}")
-
-;; deiw wants two hi's in separate registers or else they can be adjacent
-;; in memory. DI mode will ensure two registers are available, but if we
-;; want to allow memory as an operand we would need SI mode. There is no
-;; way to do this, so just restrict operand 0 and 1 to be in registers.
-(define_insn "udivmoddihi4_internal"
-  [(set (match_operand:DI 0 "register_operand" "=r")
-        (unspec:DI [(match_operand:DI 1 "register_operand" "0")
-                    (match_operand:HI 2 "general_operand" "g")] 0))]
-  ""
-  "deiw %2,%0")
-
-(define_insn "udivmoddihi4"
-  [(set (subreg:HI (match_operand:DI 0 "register_operand" "=r") 2)
-       (truncate:HI (udiv:DI (match_operand:DI 1 "register_operand" "0")
-                (zero_extend:DI (match_operand:HI 2 "nonimmediate_operand" "rm")))))
-   (set (subreg:HI (match_operand:DI 3 "register_operand" "=0") 0)
-       (truncate:HI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
-  ""
-  "deiw %2,%0")
-
-(define_expand "udivmodqi4"
-  [(parallel
-  [(set (match_operand:QI 0 "nonimmediate_operand" "")
-       (udiv:QI (match_operand:QI 1 "general_operand" "")
-                    (match_operand:QI 2 "general_operand" "")))
-   (set (match_operand:QI 3 "nonimmediate_operand" "")
-       (umod:QI (match_dup 1) (match_dup 2)))])]
-  ""
-  "
-{
-  rtx temp = gen_reg_rtx(DImode);
-  rtx insn, first, last;
-  first = emit_move_insn(gen_lowpart(QImode, temp), operands[1]);
-  emit_move_insn(gen_highpart(QImode, temp), const0_rtx);
-  operands[2] = force_reg(QImode, operands[2]);
-  emit_insn(gen_udivmoddiqi4_internal(temp, temp, operands[2]));
-  last = emit_move_insn(temp, temp);
-  {
-    rtx divdi, moddi, divqi, modqi;
-    divqi = gen_rtx (UDIV, QImode, operands[1], operands[2]);
-    modqi = gen_rtx (UMOD, QImode, operands[1], operands[2]);
-    divdi = gen_rtx (ZERO_EXTEND, DImode, divqi);
-    moddi = gen_rtx (ZERO_EXTEND, DImode, modqi);
-    REG_NOTES (first) = gen_rtx (INSN_LIST, REG_LIBCALL, last,
-                                REG_NOTES (first));
-    REG_NOTES (last) = gen_rtx (INSN_LIST, REG_RETVAL, first,
-                                gen_rtx (EXPR_LIST, REG_EQUAL,
-                       gen_rtx(IOR, DImode, moddi,
-                               gen_rtx(ASHIFT, DImode, divdi, GEN_INT(32))),
-                       REG_NOTES (last)));
-  }
-
-  insn = emit_move_insn(operands[0], gen_highpart(QImode, temp));
-  insn = emit_move_insn(operands[3], gen_lowpart(QImode, temp));
-  DONE;
-}")
-
-;; deib wants two qi's in separate registers or else they can be adjacent
-;; in memory. DI mode will ensure two registers are available, but if we
-;; want to allow memory as an operand we would need HI mode. There is no
-;; way to do this, so just restrict operand 0 and 1 to be in registers.
-(define_insn "udivmoddiqi4_internal"
-  [(set (match_operand:DI 0 "register_operand" "=r")
-        (unspec:DI [(match_operand:DI 1 "register_operand" "0")
-                    (match_operand:QI 2 "general_operand" "g")] 0))]
-  ""
-  "deib %2,%0")
-
-(define_insn "udivmoddiqi4"
-  [(set (subreg:QI (match_operand:DI 0 "register_operand" "=r") 1)
-       (truncate:QI (udiv:DI (match_operand:DI 1 "register_operand" "0")
-                (zero_extend:DI (match_operand:QI 2 "nonimmediate_operand" "rm")))))
-   (set (subreg:QI (match_operand:DI 3 "register_operand" "=0") 0)
-       (truncate:QI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
-  ""
-  "deib %2,%0")
+;;;; Part word variants. These seem to never be used at the moment (gcc
+;;;; 2.7.2.2). The code generation prefers to zero extend hi's and qi's
+;;;; and use signed div and mod. Keep these insns incase that changes.
+;;;; divmod should have an advantage when both div and mod are needed. However,
+;;;; divmod uses two registers, so maybe the compiler knows best.
+;;
+;;(define_expand "udivmodhi4"
+;;  [(parallel
+;;  [(set (match_operand:HI 0 "nonimmediate_operand" "")
+;;     (udiv:HI (match_operand:HI 1 "general_operand" "")
+;;                  (match_operand:HI 2 "general_operand" "")))
+;;   (set (match_operand:HI 3 "nonimmediate_operand" "")
+;;     (umod:HI (match_dup 1) (match_dup 2)))])]
+;;  ""
+;;  "
+;;{
+;;  rtx temp = gen_reg_rtx(DImode);
+;;  rtx insn, first, last;
+;;  first = emit_move_insn(gen_lowpart(HImode, temp), operands[1]);
+;;  emit_move_insn(gen_highpart (HImode, temp), const0_rtx);
+;;  operands[2] = force_reg(HImode, operands[2]);
+;;  emit_insn(gen_udivmoddihi4_internal(temp, temp, operands[2]));
+;;  last = emit_move_insn(temp, temp);
+;;  {
+;;    rtx divdi, moddi, divhi, modhi;
+;;    divhi = gen_rtx (UDIV, HImode, operands[1], operands[2]);
+;;    modhi = gen_rtx (UMOD, HImode, operands[1], operands[2]);
+;;    divdi = gen_rtx (ZERO_EXTEND, DImode, divhi);
+;;    moddi = gen_rtx (ZERO_EXTEND, DImode, modhi);
+;;    REG_NOTES (first) = gen_rtx (INSN_LIST, REG_LIBCALL, last,
+;;                              REG_NOTES (first));
+;;    REG_NOTES (last) = gen_rtx (INSN_LIST, REG_RETVAL, first,
+;;                                gen_rtx (EXPR_LIST, REG_EQUAL,
+;;                       gen_rtx(IOR, DImode, moddi,
+;;                               gen_rtx(ASHIFT, DImode, divdi, GEN_INT(32))),
+;;                       REG_NOTES (last)));
+;;  }
+;;
+;;  insn = emit_move_insn(operands[0], gen_highpart(HImode, temp));
+;;  insn = emit_move_insn(operands[3], gen_lowpart(HImode, temp));
+;;  DONE;
+;;}")
+;;
+;;;; deiw wants two hi's in separate registers or else they can be adjacent
+;;;; in memory. DI mode will ensure two registers are available, but if we
+;;;; want to allow memory as an operand we would need SI mode. There is no
+;;;; way to do this, so just restrict operand 0 and 1 to be in registers.
+;;(define_insn "udivmoddihi4_internal"
+;;  [(set (match_operand:DI 0 "register_operand" "=r")
+;;        (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+;;                    (match_operand:HI 2 "general_operand" "g")] 0))]
+;;  ""
+;;  "deiw %2,%0")
+;;
+;;(define_insn "udivmoddihi4"
+;;  [(set (subreg:HI (match_operand:DI 0 "register_operand" "=r") 2)
+;;     (truncate:HI (udiv:DI (match_operand:DI 1 "register_operand" "0")
+;;              (zero_extend:DI (match_operand:HI 2 "nonimmediate_operand" "rm")))))
+;;   (set (subreg:HI (match_operand:DI 3 "register_operand" "=0") 0)
+;;     (truncate:HI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
+;;  ""
+;;  "deiw %2,%0")
+;;
+;;(define_expand "udivmodqi4"
+;;  [(parallel
+;;  [(set (match_operand:QI 0 "nonimmediate_operand" "")
+;;     (udiv:QI (match_operand:QI 1 "general_operand" "")
+;;                  (match_operand:QI 2 "general_operand" "")))
+;;   (set (match_operand:QI 3 "nonimmediate_operand" "")
+;;     (umod:QI (match_dup 1) (match_dup 2)))])]
+;;  ""
+;;  "
+;;{
+;;  rtx temp = gen_reg_rtx(DImode);
+;;  rtx insn, first, last;
+;;  first = emit_move_insn(gen_lowpart(QImode, temp), operands[1]);
+;;  emit_move_insn(gen_highpart(QImode, temp), const0_rtx);
+;;  operands[2] = force_reg(QImode, operands[2]);
+;;  emit_insn(gen_udivmoddiqi4_internal(temp, temp, operands[2]));
+;;  last = emit_move_insn(temp, temp);
+;;  {
+;;    rtx divdi, moddi, divqi, modqi;
+;;    divqi = gen_rtx (UDIV, QImode, operands[1], operands[2]);
+;;    modqi = gen_rtx (UMOD, QImode, operands[1], operands[2]);
+;;    divdi = gen_rtx (ZERO_EXTEND, DImode, divqi);
+;;    moddi = gen_rtx (ZERO_EXTEND, DImode, modqi);
+;;    REG_NOTES (first) = gen_rtx (INSN_LIST, REG_LIBCALL, last,
+;;                              REG_NOTES (first));
+;;    REG_NOTES (last) = gen_rtx (INSN_LIST, REG_RETVAL, first,
+;;                                gen_rtx (EXPR_LIST, REG_EQUAL,
+;;                       gen_rtx(IOR, DImode, moddi,
+;;                               gen_rtx(ASHIFT, DImode, divdi, GEN_INT(32))),
+;;                       REG_NOTES (last)));
+;;  }
+;;
+;;  insn = emit_move_insn(operands[0], gen_highpart(QImode, temp));
+;;  insn = emit_move_insn(operands[3], gen_lowpart(QImode, temp));
+;;  DONE;
+;;}")
+;;
+;;;; deib wants two qi's in separate registers or else they can be adjacent
+;;;; in memory. DI mode will ensure two registers are available, but if we
+;;;; want to allow memory as an operand we would need HI mode. There is no
+;;;; way to do this, so just restrict operand 0 and 1 to be in registers.
+;;(define_insn "udivmoddiqi4_internal"
+;;  [(set (match_operand:DI 0 "register_operand" "=r")
+;;        (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+;;                    (match_operand:QI 2 "general_operand" "g")] 0))]
+;;  ""
+;;  "deib %2,%0")
+;;
+;;(define_insn "udivmoddiqi4"
+;;  [(set (subreg:QI (match_operand:DI 0 "register_operand" "=r") 1)
+;;     (truncate:QI (udiv:DI (match_operand:DI 1 "register_operand" "0")
+;;              (zero_extend:DI (match_operand:QI 2 "nonimmediate_operand" "rm")))))
+;;   (set (subreg:QI (match_operand:DI 3 "register_operand" "=0") 0)
+;;     (truncate:QI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
+;;  ""
+;;  "deib %2,%0")
 \f
 ;;- Divide instructions.
 
   "andb %2,%0")
 
 ;; See note 1
-(define_insn ""
+(define_insn "*bicsi"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (and:SI (not:SI (match_operand:SI 1 "general_operand" "g"))
                (match_operand:SI 2 "general_operand" "0")))]
   ""
   "bicd %1,%0")
 
-(define_insn ""
+(define_insn "*bichi"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (and:HI (not:HI (match_operand:HI 1 "general_operand" "g"))
                (match_operand:HI 2 "general_operand" "0")))]
   ""
   "bicw %1,%0")
 
-(define_insn ""
+(define_insn "*bicqi"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (and:QI (not:QI (match_operand:QI 1 "general_operand" "g"))
                (match_operand:QI 2 "general_operand" "0")))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*ashrisi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "ashd %n2,%0")
 
-(define_insn ""
+(define_insn "*ashrsi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*ashrihi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "ashw %n2,%0")
 
-(define_insn ""
+(define_insn "*ashrhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*ashriqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "ashb %n2,%0")
 
-(define_insn ""
+(define_insn "*ashrqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*lshrisi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "lshd %n2,%0")
 
-(define_insn ""
+(define_insn "*lshrsi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*lshrihi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "lshw %n2,%0")
 
-(define_insn ""
+(define_insn "*lshrhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*lshriqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "lshb %n2,%0")
 
-(define_insn ""
+(define_insn "*lshrqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*rotrisi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (rotatert:SI (match_operand:SI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "rotd %n2,%0")
 
-(define_insn ""
+(define_insn "*rotrsi3"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (rotatert:SI (match_operand:SI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*rotrihi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (rotatert:HI (match_operand:HI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "rotw %n2,%0")
 
-(define_insn ""
+(define_insn "*rotrhi3"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
        (rotatert:HI (match_operand:HI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
     operands[2] = gen_rtx_NEG (SImode, negate_rtx (SImode, operands[2]));
 }")
 
-(define_insn ""
+(define_insn "*rotriqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (rotatert:QI (match_operand:QI 1 "general_operand" "0")
                     (match_operand:SI 2 "immediate_operand" "i")))]
   ""
   "rotb %n2,%0")
 
-(define_insn ""
+(define_insn "*rotrqi3"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (rotatert:QI (match_operand:QI 1 "general_operand" "0")
                     (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
 ;; These come after the move, add, and multiply patterns
 ;; because we don't want pushl $1 turned into pushad 1.
 
-(define_insn ""
+(define_insn "*addrsi"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
        (match_operand:QI 1 "address_operand" "p"))]
   ""
 ;; Set, Clear, and Invert bit
 
 ;; See note 1
-(define_insn ""
+(define_insn "*sbitsi"
   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+rm")
                         (const_int 1)
                         (match_operand:SI 1 "general_operand" "g"))
   "sbitd %1,%0")
 
 ;; See note 1
-(define_insn ""
+(define_insn "*cbitsi"
   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+rm")
                         (const_int 1)
                         (match_operand:SI 1 "general_operand" "g"))
   "cbitd %1,%0")
 
 ;; See note 1
-(define_insn ""
+(define_insn "*ibitsi"
   [(set (match_operand:SI 0 "nonimmediate_operand" "+rm")
        (xor:SI (ashift:SI (const_int 1)
                           (match_operand:SI 1 "general_operand" "g"))
   "ibitd %1,%0")
 
 ;; See note 1
-(define_insn ""
+(define_insn "*ibitqi"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
        (xor:QI (subreg:QI
                 (ashift:SI (const_int 1)
 
 ;; Recognize jbs and jbc instructions.
 
-(define_insn ""
+(define_insn "*tbit"
   [(set (cc0)
        (zero_extract (match_operand:SI 0 "nonimmediate_operand" "rm")
                      (const_int 1)
 ;; we cannot use it for a destination.  Perhaps things are fast
 ;; enough on the 32532 that such hacks are not needed.
 
-(define_insn ""
+(define_insn "*extract_bytes"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
        (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
                         (match_operand:SI 2 "const_int_operand" "i")
 ;; A machine specific option (-mbitfield/-mnobitfield) is used
 ;; to allow/disallow the use of these instructions.
 
-(define_insn ""
+(define_insn "*bitfield_ext"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
        (zero_extract:SI (match_operand:SI 1 "register_operand" "g")
                         (match_operand:SI 2 "const_int_operand" "i")
   else return \"extd %3,%1,%0,%2\";
 }")
 
-(define_insn ""
-  [(set (zero_extract:SI (match_operand:SI 0 "memory_operand" "+o")
-                        (match_operand:SI 1 "const_int_operand" "i")
-                        (match_operand:SI 2 "nonmemory_operand" "rn"))
-       (match_operand:SI 3 "nonimmediate_operand" "rm"))]
+(define_insn "*bitfield_set"
+  [(set (zero_extract:SI (match_operand:SI 0 "memory_operand" "+o,+r")
+                        (match_operand:SI 1 "const_int_operand" "i,i")
+                        (match_operand:SI 2 "nonmemory_operand" "rn,rK"))
+       (match_operand:SI 3 "nonimmediate_operand" "rm,rm"))]
   "TARGET_BITFIELD"
   "*
 { if (GET_CODE (operands[2]) == CONST_INT)
     {
-      if (INTVAL (operands[2]) >= 8)
+      if (which_alternative == 0 && INTVAL (operands[2]) >= 8)
        {
          operands[0] = adjust_address (operands[0], QImode,
                                        INTVAL (operands[2]) / 8);
   return \"insd %2,%3,%0,%1\";
 }")
 
-(define_insn ""
-  [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
-                        (match_operand:SI 1 "const_int_operand" "i")
-                        (match_operand:SI 2 "nonmemory_operand" "rK"))
-       (match_operand:SI 3 "nonimmediate_operand" "rm"))]
-  "TARGET_BITFIELD"
-  "*
-{ if (GET_CODE (operands[2]) == CONST_INT)
-  {  
-    if (INTVAL (operands[1]) <= 8)
-      return \"inssb %3,%0,%2,%1\";
-    else if (INTVAL (operands[1]) <= 16)
-      return \"inssw %3,%0,%2,%1\";
-    else
-      return \"inssd %3,%0,%2,%1\";
-  }
-  return \"insd %2,%3,%0,%1\";
-}")
 
 (define_insn "insv"
   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+rm")
   ""
   "bls %l0")
 \f
-(define_insn ""
+;; "Reversed" jump instructions. Are these ever generated?
+
+(define_insn "*bne"
   [(set (pc)
        (if_then_else (eq (cc0)
                          (const_int 0))
   else return \"bne %l0\";
 }")
 
-(define_insn ""
+(define_insn "*beq"
   [(set (pc)
        (if_then_else (ne (cc0)
                          (const_int 0))
   else return \"beq %l0\";
 }")
 
-(define_insn ""
+(define_insn "*ble"
   [(set (pc)
        (if_then_else (gt (cc0)
                          (const_int 0))
   ""
   "ble %l0")
 
-(define_insn ""
+(define_insn "*bleu"
   [(set (pc)
        (if_then_else (gtu (cc0)
                           (const_int 0))
   ""
   "bls %l0")
 
-(define_insn ""
+(define_insn "*bge"
   [(set (pc)
        (if_then_else (lt (cc0)
                          (const_int 0))
   ""
   "bge %l0")
 
-(define_insn ""
+(define_insn "*bgeu"
   [(set (pc)
        (if_then_else (ltu (cc0)
                           (const_int 0))
   ""
   "bhs %l0")
 
-(define_insn ""
+(define_insn "*blt"
   [(set (pc)
        (if_then_else (ge (cc0)
                          (const_int 0))
   ""
   "blt %l0")
 
-(define_insn ""
+(define_insn "*bltu"
   [(set (pc)
        (if_then_else (geu (cc0)
                           (const_int 0))
   ""
   "blo %l0")
 
-(define_insn ""
+(define_insn "*bgt"
   [(set (pc)
        (if_then_else (le (cc0)
                          (const_int 0))
   ""
   "bgt %l0")
 
-(define_insn ""
+(define_insn "*bgtu"
   [(set (pc)
        (if_then_else (leu (cc0)
                           (const_int 0))
 ;; Subtract-and-jump and Add-and-jump insns.
 ;; These can actually be used for adding numbers in the range -8 to 7
 
-(define_insn ""
+(define_insn "*sub_br"
   [(set (pc)
        (if_then_else
         (ne (match_operand:SI 0 "nonimmediate_operand" "+rm")
   "INTVAL (operands[1]) > -8 && INTVAL (operands[1]) <= 8"
   "acbd %n1,%0,%l2")
 
-(define_insn ""
+(define_insn "*add_br"
   [(set (pc)
        (if_then_else
         (ne (match_operand:SI 0 "nonimmediate_operand" "+rm")
 \f
 (define_insn "call"
   [(call (match_operand:QI 0 "memory_operand" "m")
-        (match_operand:QI 1 "general_operand" "g"))]
+        (match_operand 1 "" ""))]
+  ;; Operand 1 is not used
   ""
   "*
 {
 (define_insn "call_value"
   [(set (match_operand 0 "" "=rf")
        (call (match_operand:QI 1 "memory_operand" "m")
-             (match_operand:QI 2 "general_operand" "g")))]
+             (match_operand 2 "" "")))]
+   ;; Operand 2 is not used
   ""
   "*
 {
 
 ;; Scondi instructions
 (define_insn "seq"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (eq:SI (cc0) (const_int 0)))]
   ""
   "*
   else return \"seqd %0\";
 }")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*seqhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (eq:HI (cc0) (const_int 0)))]
   ""
   "*
   else return \"seqw %0\";
 }")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*seqqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (eq:QI (cc0) (const_int 0)))]
   ""
   "*
 }")
 
 (define_insn "sne"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (ne:SI (cc0) (const_int 0)))]
   ""
   "*
   else return \"sned %0\";
 }")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*snehi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (ne:HI (cc0) (const_int 0)))]
   ""
   "*
   else return \"snew %0\";
 }")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sneqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (ne:QI (cc0) (const_int 0)))]
   ""
   "*
 }")
 
 (define_insn "sgt"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (gt:SI (cc0) (const_int 0)))]
   ""
   "sgtd %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgthi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (gt:HI (cc0) (const_int 0)))]
   ""
   "sgtw %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgtqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (gt:QI (cc0) (const_int 0)))]
   ""
   "sgtb %0")
 
 (define_insn "sgtu"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (gtu:SI (cc0) (const_int 0)))]
   ""
   "shid %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgtuhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (gtu:HI (cc0) (const_int 0)))]
   ""
   "shiw %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgtuqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (gtu:QI (cc0) (const_int 0)))]
   ""
   "shib %0")
 
 (define_insn "slt"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (lt:SI (cc0) (const_int 0)))]
   ""
   "sltd %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*slthi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (lt:HI (cc0) (const_int 0)))]
   ""
   "sltw %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sltqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (lt:QI (cc0) (const_int 0)))]
   ""
   "sltb %0")
 
 (define_insn "sltu"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (ltu:SI (cc0) (const_int 0)))]
   ""
   "slod %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sltuhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (ltu:HI (cc0) (const_int 0)))]
   ""
   "slow %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sltuqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (ltu:QI (cc0) (const_int 0)))]
   ""
   "slob %0")
 
 (define_insn "sge"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (ge:SI (cc0) (const_int 0)))]
   ""
   "sged %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgehi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (ge:HI (cc0) (const_int 0)))]
   ""
   "sgew %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgeqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (ge:QI (cc0) (const_int 0)))]
   ""
   "sgeb %0")
 
 (define_insn "sgeu"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (geu:SI (cc0) (const_int 0)))]
   ""
   "shsd %0")  
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgeuhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (geu:HI (cc0) (const_int 0)))]
   ""
   "shsw %0")  
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sgeuqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (geu:QI (cc0) (const_int 0)))]
   ""
   "shsb %0")  
 
 (define_insn "sle"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (le:SI (cc0) (const_int 0)))]
   ""
   "sled %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*slehi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (le:HI (cc0) (const_int 0)))]
   ""
   "slew %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sleqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (le:QI (cc0) (const_int 0)))]
   ""
   "sleb %0")
 
 (define_insn "sleu"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<")
        (leu:SI (cc0) (const_int 0)))]
   ""
   "slsd %0")
 
-(define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sleuhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<")
        (leu:HI (cc0) (const_int 0)))]
   ""
   "slsw %0")
 
-(define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
+(define_insn "*sleuqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r<")
        (leu:QI (cc0) (const_int 0)))]
   ""
   "slsb %0")
 \f
 ;; ffs instructions
 
-(define_insn ""
+(define_insn "*ffs"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
        (minus:SI 
                (plus:SI (ffs:SI (zero_extract:SI