diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8d89b0e04e4e1a1560e5dffd7eddac1b9858a42..53734cad6838985f98b6e3b383837ad780dbb88a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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> diff --git a/gcc/config/ns32k/ns32k.md b/gcc/config/ns32k/ns32k.md index 6622df5b74cbc5b40cd94d4eae7a424eb3fa4614..44db48071383298e772ff7e90e69162ce9861851 100644 --- a/gcc/config/ns32k/ns32k.md +++ b/gcc/config/ns32k/ns32k.md @@ -293,7 +293,7 @@ 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"))] "" @@ -334,7 +334,7 @@ }") ;; This special case must precede movsi. -(define_insn "" +(define_insn "*ldsp" [(set (reg:SI 25) (match_operand:SI 0 "general_operand" "g"))] "" @@ -797,7 +797,7 @@ "truncld %1,%0") ;; 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")) @@ -808,7 +808,7 @@ 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")) @@ -821,7 +821,7 @@ ;; 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")) @@ -831,7 +831,7 @@ 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")) @@ -858,7 +858,7 @@ "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")))] @@ -883,14 +883,14 @@ 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")))] @@ -992,7 +992,7 @@ 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")))] @@ -1020,7 +1020,7 @@ 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")))] @@ -1049,7 +1049,7 @@ "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")))] @@ -1135,7 +1135,7 @@ 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")))] @@ -1164,7 +1164,7 @@ 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")))] @@ -1283,125 +1283,125 @@ "" "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") ;;- Divide instructions. @@ -1531,21 +1531,21 @@ "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")))] @@ -1778,14 +1778,14 @@ 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"))))] @@ -1803,14 +1803,14 @@ 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"))))] @@ -1828,14 +1828,14 @@ 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"))))] @@ -1856,14 +1856,14 @@ 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"))))] @@ -1881,14 +1881,14 @@ 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"))))] @@ -1906,14 +1906,14 @@ 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"))))] @@ -1956,14 +1956,14 @@ 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"))))] @@ -1981,14 +1981,14 @@ 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"))))] @@ -2006,14 +2006,14 @@ 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"))))] @@ -2024,7 +2024,7 @@ ;; 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"))] "" @@ -2068,7 +2068,7 @@ ;; 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")) @@ -2077,7 +2077,7 @@ "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")) @@ -2086,7 +2086,7 @@ "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")) @@ -2095,7 +2095,7 @@ "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) @@ -2106,7 +2106,7 @@ ;; Recognize jbs and jbc instructions. -(define_insn "" +(define_insn "*tbit" [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "rm") (const_int 1) @@ -2130,7 +2130,7 @@ ;; 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") @@ -2182,7 +2182,7 @@ ;; 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") @@ -2206,16 +2206,16 @@ 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); @@ -2231,24 +2231,6 @@ 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") @@ -2378,7 +2360,9 @@ "" "bls %l0") -(define_insn "" +;; "Reversed" jump instructions. Are these ever generated? + +(define_insn "*bne" [(set (pc) (if_then_else (eq (cc0) (const_int 0)) @@ -2393,7 +2377,7 @@ else return \"bne %l0\"; }") -(define_insn "" +(define_insn "*beq" [(set (pc) (if_then_else (ne (cc0) (const_int 0)) @@ -2408,7 +2392,7 @@ else return \"beq %l0\"; }") -(define_insn "" +(define_insn "*ble" [(set (pc) (if_then_else (gt (cc0) (const_int 0)) @@ -2417,7 +2401,7 @@ "" "ble %l0") -(define_insn "" +(define_insn "*bleu" [(set (pc) (if_then_else (gtu (cc0) (const_int 0)) @@ -2426,7 +2410,7 @@ "" "bls %l0") -(define_insn "" +(define_insn "*bge" [(set (pc) (if_then_else (lt (cc0) (const_int 0)) @@ -2435,7 +2419,7 @@ "" "bge %l0") -(define_insn "" +(define_insn "*bgeu" [(set (pc) (if_then_else (ltu (cc0) (const_int 0)) @@ -2444,7 +2428,7 @@ "" "bhs %l0") -(define_insn "" +(define_insn "*blt" [(set (pc) (if_then_else (ge (cc0) (const_int 0)) @@ -2453,7 +2437,7 @@ "" "blt %l0") -(define_insn "" +(define_insn "*bltu" [(set (pc) (if_then_else (geu (cc0) (const_int 0)) @@ -2462,7 +2446,7 @@ "" "blo %l0") -(define_insn "" +(define_insn "*bgt" [(set (pc) (if_then_else (le (cc0) (const_int 0)) @@ -2471,7 +2455,7 @@ "" "bgt %l0") -(define_insn "" +(define_insn "*bgtu" [(set (pc) (if_then_else (leu (cc0) (const_int 0)) @@ -2483,7 +2467,7 @@ ;; 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") @@ -2496,7 +2480,7 @@ "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") @@ -2512,7 +2496,8 @@ (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 "" "* { @@ -2551,7 +2536,8 @@ (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 "" "* { @@ -2684,7 +2670,7 @@ ;; 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)))] "" "* @@ -2695,8 +2681,8 @@ 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)))] "" "* @@ -2707,8 +2693,8 @@ 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)))] "" "* @@ -2720,7 +2706,7 @@ }") (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)))] "" "* @@ -2731,8 +2717,8 @@ 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)))] "" "* @@ -2743,8 +2729,8 @@ 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)))] "" "* @@ -2756,152 +2742,152 @@ }") (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") ;; ffs instructions -(define_insn "" +(define_insn "*ffs" [(set (match_operand:SI 0 "nonimmediate_operand" "=ro") (minus:SI (plus:SI (ffs:SI (zero_extract:SI