This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
ia64 timode reload fix, part 2
- To: gcc-patches at gcc dot gnu dot org
- Subject: ia64 timode reload fix, part 2
- From: Richard Henderson <rth at cygnus dot com>
- Date: Tue, 29 Aug 2000 14:29:15 -0700
Correllary to the previous.
r~
* config/ia64/ia64.md (reload_inti): Use a TImode scratch. Use
the half that does not conflict with the reload register.
(reload_outti): Likewise.
Index: config/ia64/ia64.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/ia64/ia64.md,v
retrieving revision 1.38
diff -c -p -d -r1.38 ia64.md
*** ia64.md 2000/08/24 21:40:24 1.38
--- ia64.md 2000/08/29 21:10:06
***************
*** 668,694 ****
(define_expand "reload_inti"
[(parallel [(set (match_operand:TI 0 "register_operand" "=r")
(match_operand:TI 1 "" "m"))
! (clobber (match_operand:DI 2 "register_operand" "=&r"))])]
""
"
{
! /* ??? Should now be enforced by tweeks to push_secondary_reload. */
! if (reg_overlap_mentioned_p (operands[2], operands[0])
! || reg_overlap_mentioned_p (operands[2], operands[1]))
! abort ();
}")
(define_expand "reload_outti"
[(parallel [(set (match_operand:TI 0 "" "=m")
(match_operand:TI 1 "register_operand" "r"))
! (clobber (match_operand:DI 2 "register_operand" "=&r"))])]
""
"
{
! /* ??? Should now be enforced by tweeks to push_secondary_reload. */
! if (reg_overlap_mentioned_p (operands[2], operands[0])
! || reg_overlap_mentioned_p (operands[2], operands[1]))
! abort ();
}")
;; Floating Point Moves
--- 668,694 ----
(define_expand "reload_inti"
[(parallel [(set (match_operand:TI 0 "register_operand" "=r")
(match_operand:TI 1 "" "m"))
! (clobber (match_operand:TI 2 "register_operand" "=&r"))])]
""
"
{
! unsigned int s_regno = REGNO (operands[2]);
! if (s_regno == REGNO (operands[0]))
! s_regno += 1;
! operands[2] = gen_rtx_REG (DImode, s_regno);
}")
(define_expand "reload_outti"
[(parallel [(set (match_operand:TI 0 "" "=m")
(match_operand:TI 1 "register_operand" "r"))
! (clobber (match_operand:TI 2 "register_operand" "=&r"))])]
""
"
{
! unsigned int s_regno = REGNO (operands[2]);
! if (s_regno == REGNO (operands[1]))
! s_regno += 1;
! operands[2] = gen_rtx_REG (DImode, s_regno);
}")
;; Floating Point Moves