diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2003-01-09 13:05:49 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2003-01-09 13:05:49 +0000 |
commit | 867504e66013d99de08cb244ffc911c829b6fb82 (patch) | |
tree | 9f7f5079c3d85aef61f22062062e4940c178a652 /gcc | |
parent | 4a69cf7914102d0438d0d628007049b7ac95b46f (diff) | |
download | gcc-867504e66013d99de08cb244ffc911c829b6fb82.zip gcc-867504e66013d99de08cb244ffc911c829b6fb82.tar.gz gcc-867504e66013d99de08cb244ffc911c829b6fb82.tar.bz2 |
h8300.md (*addsi3_upper): New.
* config/h8300/h8300.md (*addsi3_upper): New.
(*iorsi3_shift): Likewise.
(two splitters): Likewise.
(*addsi3_shift): Likewise.
(two splitters): Likewise.
From-SVN: r61106
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 120 |
2 files changed, 128 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c068975..6b58b1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-01-09 Kazu Hirata <kazu@cs.umass.edu> + + * config/h8300/h8300.md (*addsi3_upper): New. + (*iorsi3_shift): Likewise. + (two splitters): Likewise. + (*addsi3_shift): Likewise. + (two splitters): Likewise. + 2003-01-09 Josef Zlomek <zlomj9am@artax.karlin.mff.cuni.cz> * Makefile.in (optabs.o): Add dependency on basic-block.h. diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 2f7619a..65ff988 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -2600,6 +2600,16 @@ ;; plus:SI +(define_insn "*addsi3_upper" + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") + (const_int 65536)) + (match_operand:SI 2 "register_operand" "0")))] + "TARGET_H8300H || TARGET_H8300S" + "add.w\\t%f1,%e0" + [(set_attr "length" "2") + (set_attr "cc" "clobber")]) + (define_insn "*addsi3_lshiftrt_16_zexthi" [(set (match_operand:SI 0 "register_operand" "=r") (plus:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "r") @@ -2691,6 +2701,116 @@ [(set_attr "cc" "clobber") (set_attr "length" "2")]) +;; Used to OR the exponent of a float. + +(define_insn "*iorsi3_shift" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") + (const_int 23)) + (match_operand:SI 2 "register_operand" "0"))) + (clobber (match_scratch:SI 3 "=&r"))] + "TARGET_H8300H || TARGET_H8300S" + "#") + +(define_split + [(parallel + [(set (match_operand:SI 0 "register_operand" "") + (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "") + (const_int 23)) + (match_dup 0))) + (clobber (match_operand:SI 2 "register_operand" ""))])] + "(TARGET_H8300H || TARGET_H8300S) + && flow2_completed + && find_regno_note (insn, REG_DEAD, REGNO (operands[1])) + && REGNO (operands[0]) != REGNO (operands[1])" + [(parallel [(set (match_dup 3) + (ashift:HI (match_dup 3) + (const_int 7))) + (clobber (scratch:QI))]) + (set (match_dup 0) + (ior:SI (ashift:SI (match_dup 1) + (const_int 16)) + (match_dup 0)))] + "operands[3] = gen_rtx_REG (HImode, REGNO (operands[1]));") + +(define_split + [(parallel + [(set (match_operand:SI 0 "register_operand" "") + (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "") + (const_int 23)) + (match_dup 0))) + (clobber (match_operand:SI 2 "register_operand" ""))])] + "(TARGET_H8300H || TARGET_H8300S) + && flow2_completed + && !(find_regno_note (insn, REG_DEAD, REGNO (operands[1])) + && REGNO (operands[0]) != REGNO (operands[1]))" + [(set (match_dup 2) + (match_dup 1)) + (parallel [(set (match_dup 3) + (ashift:HI (match_dup 3) + (const_int 7))) + (clobber (scratch:QI))]) + (set (match_dup 0) + (ior:SI (ashift:SI (match_dup 2) + (const_int 16)) + (match_dup 0)))] + "operands[3] = gen_rtx_REG (HImode, REGNO (operands[2]));") + +;; Used to add the exponent of a float. + +(define_insn "*addsi3_shift" + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") + (const_int 8388608)) + (match_operand:SI 2 "register_operand" "0"))) + (clobber (match_scratch:SI 3 "=&r"))] + "TARGET_H8300H || TARGET_H8300S" + "#") + +(define_split + [(parallel + [(set (match_operand:SI 0 "register_operand" "") + (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "") + (const_int 8388608)) + (match_dup 0))) + (clobber (match_operand:SI 2 "register_operand" ""))])] + "(TARGET_H8300H || TARGET_H8300S) + && flow2_completed + && find_regno_note (insn, REG_DEAD, REGNO (operands[1])) + && REGNO (operands[0]) != REGNO (operands[1])" + [(parallel [(set (match_dup 3) + (ashift:HI (match_dup 3) + (const_int 7))) + (clobber (scratch:QI))]) + (set (match_dup 0) + (plus:SI (mult:SI (match_dup 1) + (const_int 65536)) + (match_dup 0)))] + "operands[3] = gen_rtx_REG (HImode, REGNO (operands[1]));") + +(define_split + [(parallel + [(set (match_operand:SI 0 "register_operand" "") + (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "") + (const_int 8388608)) + (match_dup 0))) + (clobber (match_operand:SI 2 "register_operand" ""))])] + "(TARGET_H8300H || TARGET_H8300S) + && flow2_completed + && !(find_regno_note (insn, REG_DEAD, REGNO (operands[1])) + && REGNO (operands[0]) != REGNO (operands[1]))" + [(set (match_dup 2) + (match_dup 1)) + (parallel [(set (match_dup 3) + (ashift:HI (match_dup 3) + (const_int 7))) + (clobber (scratch:QI))]) + (set (match_dup 0) + (plus:SI (mult:SI (match_dup 2) + (const_int 65536)) + (match_dup 0)))] + "operands[3] = gen_rtx_REG (HImode, REGNO (operands[2]));") + ;; xor:HI (define_insn "*xorhi3_zextqi" |