From 05fb1639060fc8db1c2512a819e35bd2b25dc5e6 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Sat, 15 Dec 2001 01:16:28 +0000 Subject: [PATCH] h8300.md (udivqi3): Remove. * config/h8300/h8300.md (udivqi3): Remove. (divqi3): Likewise. (udivhi3): Likewise. (divhi3): Likewise. (umodqi3): Likewise. (modqi3): Likewise. (umodhi3): Likewise. (modhi3): Likewise. (udivmodqi3): New. (divmodqi3): Likewise. (udivmodhi3): Likewise. (divmodhi3): Likewise. From-SVN: r48023 --- gcc/ChangeLog | 15 +++++ gcc/config/h8300/h8300.md | 120 ++++++++++++++++++-------------------- 2 files changed, 72 insertions(+), 63 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14fd691451f..3dba7c75231 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2001-12-14 Kazu Hirata + + * config/h8300/h8300.md (udivqi3): Remove. + (divqi3): Likewise. + (udivhi3): Likewise. + (divhi3): Likewise. + (umodqi3): Likewise. + (modqi3): Likewise. + (umodhi3): Likewise. + (modhi3): Likewise. + (udivmodqi3): New. + (divmodqi3): Likewise. + (udivmodhi3): Likewise. + (divmodhi3): Likewise. + Sat Dec 15 01:39:12 CET 2001 Jan Hubicka * cfgcleanup.c (flow_find_cross_jump): Replace tests for note diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 2e0ad0d47ea..285d9adad88 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -921,100 +921,94 @@ (set_attr "cc" "none_0hit")]) ;; ---------------------------------------------------------------------- -;; DIVIDE INSTRUCTIONS +;; DIVIDE/MOD INSTRUCTIONS ;; ---------------------------------------------------------------------- -(define_insn "udivqi3" +(define_insn "udivmodqi4" [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI (udiv:HI (match_operand:HI 1 "general_operand" "0") - (zero_extend:HI (match_operand:QI 2 "register_operand" "r")))))] - "" - "divxu %X2,%T0" - [(set_attr "length" "2") - (set_attr "cc" "clobber")]) - -;; ??? Will divxu always work here? - -(define_insn "divqi3" - [(set (match_operand:QI 0 "register_operand" "=r") + (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))) + (set (match_operand:QI 3 "register_operand" "=r") (truncate:QI - (div:HI - (match_operand:HI 1 "general_operand" "0") - (sign_extend:HI (match_operand:QI 2 "register_operand" "r")))))] - "" - "divxu %X2,%T0" - [(set_attr "length" "2") - (set_attr "cc" "clobber")]) - -(define_insn "udivhi3" - [(set (match_operand:HI 0 "register_operand" "=r") - (truncate:HI - (udiv:SI - (match_operand:SI 1 "general_operand" "0") - (zero_extend:SI (match_operand:HI 2 "register_operand" "r")))))] - "TARGET_H8300H || TARGET_H8300S" - "divxu.w %T2,%S0" - [(set_attr "length" "2") - (set_attr "cc" "clobber")]) - -(define_insn "divhi3" - [(set (match_operand:HI 0 "register_operand" "=r") - (truncate:HI - (div:SI - (match_operand:SI 1 "general_operand" "0") - (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))))] + (umod:HI + (match_dup 1) + (zero_extend:HI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" - "divxs.w %T2,%S0" + "* +{ + if (find_reg_note (insn, REG_UNUSED, operands[3])) + return \"divxu.b\\t%X2,%T0\"; + else + return \"divxu.b\\t%X2,%T0\;mov.b\\t%t0,%s3\"; +}" [(set_attr "length" "4") (set_attr "cc" "clobber")]) -;; ---------------------------------------------------------------------- -;; MOD INSTRUCTIONS -;; ---------------------------------------------------------------------- - -(define_insn "umodqi3" +(define_insn "divmodqi4" [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI - (umod:HI + (div:HI (match_operand:HI 1 "general_operand" "0") - (zero_extend:HI (match_operand:QI 2 "register_operand" "r")))))] - "" - "divxu %X2,%T0\;mov %t0,%s0" - [(set_attr "length" "4") - (set_attr "cc" "clobber")]) - -(define_insn "modqi3" - [(set (match_operand:QI 0 "register_operand" "=r") + (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))) + (set (match_operand:QI 3 "register_operand" "=r") (truncate:QI (mod:HI - (match_operand:HI 1 "general_operand" "0") - (sign_extend:HI (match_operand:QI 2 "register_operand" "r")))))] + (match_dup 1) + (sign_extend:HI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" - "divxs.b %X2,%T0\;mov %t0,%s0" + "* +{ + if (find_reg_note (insn, REG_UNUSED, operands[3])) + return \"divxs.b\\t%X2,%T0\"; + else + return \"divxs.b\\t%X2,%T0\;mov.b\\t%t0,%s3\"; +}" [(set_attr "length" "6") (set_attr "cc" "clobber")]) -(define_insn "umodhi3" +(define_insn "udivmodhi4" [(set (match_operand:HI 0 "register_operand" "=r") (truncate:HI - (umod:SI + (udiv:SI (match_operand:SI 1 "general_operand" "0") - (zero_extend:SI (match_operand:HI 2 "register_operand" "r")))))] + (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))) + (set (match_operand:HI 3 "register_operand" "=r") + (truncate:HI + (umod:SI + (match_dup 1) + (zero_extend:SI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" - "divxu.w %T2,%S0\;mov %e0,%f0" + "* +{ + if (find_reg_note (insn, REG_UNUSED, operands[3])) + return \"divxu.w\\t%T2,%S0\"; + else + return \"divxu.w\\t%T2,%S0\;mov.w\\t%e0,%f3\"; +}" [(set_attr "length" "4") (set_attr "cc" "clobber")]) -(define_insn "modhi3" +(define_insn "divmodhi4" [(set (match_operand:HI 0 "register_operand" "=r") (truncate:HI - (mod:SI + (div:SI (match_operand:SI 1 "general_operand" "0") - (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))))] + (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))) + (set (match_operand:HI 3 "register_operand" "=r") + (truncate:HI + (mod:SI + (match_dup 1) + (sign_extend:SI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" - "divxs.w %T2,%S0\;mov %e0,%f0" + "* +{ + if (find_reg_note (insn, REG_UNUSED, operands[3])) + return \"divxs.w\\t%T2,%S0\"; + else + return \"divxs.w\\t%T2,%S0\;mov.w\\t%e0,%f3\"; +}" [(set_attr "length" "6") (set_attr "cc" "clobber")]) -- 2.30.2