diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2003-01-14 13:11:24 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2003-01-14 13:11:24 +0000 |
commit | 4d77fda24b78067384db548c55e5cb7b0bce0e44 (patch) | |
tree | baa8b03f8c56e9ec20b97354922c3d40ea875751 /gcc | |
parent | 77f9af81d26ddde9326b63bfc2eefa557aba064e (diff) | |
download | gcc-4d77fda24b78067384db548c55e5cb7b0bce0e44.zip gcc-4d77fda24b78067384db548c55e5cb7b0bce0e44.tar.gz gcc-4d77fda24b78067384db548c55e5cb7b0bce0e44.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 36 |
2 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 86ce412..86a3094 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-01-14 Kazu Hirata <kazu@cs.umass.edu> + + * 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 <jh@suse.cz> * 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 5b38e04..0388ff2 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" |