diff options
author | Kazu Hirata <kazu@hxi.com> | 2001-12-15 01:16:28 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2001-12-15 01:16:28 +0000 |
commit | 05fb1639060fc8db1c2512a819e35bd2b25dc5e6 (patch) | |
tree | 88335c0519902139e5c2657de0cc1b0901ebe81c | |
parent | 08f7f057cc47625a6005912eca9f752f18a67167 (diff) | |
download | gcc-05fb1639060fc8db1c2512a819e35bd2b25dc5e6.zip gcc-05fb1639060fc8db1c2512a819e35bd2b25dc5e6.tar.gz gcc-05fb1639060fc8db1c2512a819e35bd2b25dc5e6.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 120 |
2 files changed, 72 insertions, 63 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14fd691..3dba7c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2001-12-14 Kazu Hirata <kazu@hxi.com> + + * 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 <jh@suse.cz> * 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 2e0ad0d..285d9ad 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")]) |