ia64 timode reload fix, part 2

Richard Henderson rth@cygnus.com
Tue Aug 29 14:29:00 GMT 2000


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


More information about the Gcc-patches mailing list