From 4d77fda24b78067384db548c55e5cb7b0bce0e44 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Tue, 14 Jan 2003 13:11:24 +0000 Subject: [PATCH] h8300.md (*andsi3_lshiftrt_9_sb): New. * config/h8300/h8300.md (*andsi3_lshiftrt_9_sb): New. (*iorsi3_and_lshiftrt_9_sb): Likewise. From-SVN: r61280 --- gcc/ChangeLog | 5 +++++ gcc/config/h8300/h8300.md | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 86ce412aced..86a3094d715 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-01-14 Kazu Hirata + + * config/h8300/h8300.md (*andsi3_lshiftrt_9_sb): New. + (*iorsi3_and_lshiftrt_9_sb): Likewise. + Tue Jan 14 00:45:33 CET 2003 Jan Hubicka * convert.c (strip_float_extensions): Look for narrowest type handling diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 5b38e049b93..0388ff24af9 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -2616,6 +2616,24 @@ [(set_attr "length" "8") (set_attr "cc" "clobber")]) +(define_insn_and_split "*andsi3_lshiftrt_9_sb" + [(set (match_operand:SI 0 "register_operand" "=r") + (and:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "0") + (const_int 9)) + (const_int 4194304)))] + "(TARGET_H8300H || TARGET_H8300S)" + "#" + "&& reload_completed" + [(set (match_dup 0) + (and:SI (lshiftrt:SI (match_dup 0) + (const_int 25)) + (const_int 64))) + (parallel [(set (match_dup 0) + (ashift:SI (match_dup 0) + (const_int 16))) + (clobber (scratch:QI))])] + "") + ;; plus:SI (define_insn "*addsi3_upper" @@ -2740,6 +2758,24 @@ [(set_attr "length" "8") (set_attr "cc" "clobber")]) +(define_insn "*iorsi3_and_lshiftrt_9_sb" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (and:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "r") + (const_int 9)) + (const_int 4194304)) + (match_operand:SI 2 "register_operand" "0"))) + (clobber (match_scratch:HI 3 "=&r"))] + "(TARGET_H8300H || TARGET_H8300S)" + "* +{ + if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) + return \"shll.l\\t%S1\;xor.w\\t%T3,%T3\;bst\\t#6,%s3\;or.w\\t%T3,%e0\"; + else + return \"rotl.l\\t%S1\;rotr.l\\t%S1\;xor.w\\t%T3,%T3\;bst\\t#6,%s3\;or.w\\t%T3,%e0\"; +}" + [(set_attr "length" "10") + (set_attr "cc" "clobber")]) + ;; Used to OR the exponent of a float. (define_insn "*iorsi3_shift" -- 2.30.2