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
This commit is contained in:
Kazu Hirata 2003-01-09 13:05:49 +00:00 committed by Kazu Hirata
parent 4a69cf7914
commit 867504e660
2 changed files with 128 additions and 0 deletions

View File

@ -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.

View File

@ -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"