[Committed] S/390: Use macros for the FPR register numbers in the backend

Andreas Krebbel krebbel@linux.vnet.ibm.com
Mon Jul 8 12:56:00 GMT 2013


On Mon, Jul 08, 2013 at 01:03:38PM +0200, Uros Bizjak wrote:
> Hello!
> 
> > the attached patch adds F0_REGNUM ... F15_REGNUM and uses these
> > throughout the s390.c file.  The FPR numbering in the s390 backend is
> > not obvious and this hopefully makes it easier to get right for me.
> 
> Index: gcc/config/s390/s390.h
> ===================================================================
> *** gcc/config/s390/s390.h.orig
> --- gcc/config/s390/s390.h
> *************** enum reg_class
> *** 477,482 ****
> --- 477,499 ----
>     { 0xffffffff, 0x0000003f }, /* ALL_REGS */ \
>   }
> 
> + #define F0_REGNUM  16
> + #define F1_REGNUM  20
> + #define F2_REGNUM  17
> + #define F3_REGNUM  21
> + #define F4_REGNUM  18
> + #define F5_REGNUM  22
> + #define F6_REGNUM  19
> + #define F7_REGNUM  23
> + #define F8_REGNUM  24
> + #define F9_REGNUM  25
> + #define F10_REGNUM 26
> + #define F11_REGNUM 27
> + #define F12_REGNUM 28
> + #define F13_REGNUM 29
> + #define F14_REGNUM 30
> + #define F15_REGNUM 31
> 
> You can add these as define_constant in s390.md (see for example
> i386.md). There is already definition of FPR0_REGNUM and FPR2_REGNUM,
> which is now incostistent (18) with your new definitions (17).

Thanks. Now it probably became apparent that I need a vehicle to help
me with the S/390 FPR numbering.

The existing constant (FPR2_REGNUM) was wrong as well as my new macros
(>F8).

I'll commit the attached patch after successful testing.

Bye,

-Andreas-

2013-07-08  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

	* config/s390/s390.c: Replace F*_REGNUM with FPR*_REGNUM.
	* config/s390/s390.h: Remove F*_REGNUM macro definitions.
	* config/s390/s390.md: Define FPR*_REGNUM constants.
	Fix FPR2_REGNUM constant (18 -> 17).
	("*trunc<BFP:mode><DFP_ALL:mode>2")
	("*trunc<DFP_ALL:mode><BFP:mode>2")
	("trunc<BFP:mode><DFP_ALL:mode>2")
	("trunc<DFP_ALL:mode><BFP:mode>2")
	("*extend<BFP:mode><DFP_ALL:mode>2")
	("*extend<DFP_ALL:mode><BFP:mode>2")
	("extend<BFP:mode><DFP_ALL:mode>2")
	("extend<DFP_ALL:mode><BFP:mode>2"): Replace FPR2_REGNUM with
	FPR4_REGNUM.

---
 gcc/config/s390/s390.c  |   74 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 gcc/config/s390/s390.h  |   17 -----------
 gcc/config/s390/s390.md |   40 !!!!!!!!!!!!!!!!!!!!!!!!!
 3 files changed, 17 deletions(-), 114 modifications(!)

Index: gcc/config/s390/s390.c
===================================================================
*** gcc/config/s390/s390.c.orig
--- gcc/config/s390/s390.c
*************** struct GTY (()) s390_frame_layout
*** 333,341 ****
    /* Bits standing for floating point registers. Set, if the
       respective register has to be saved. Starting with reg 16 (f0)
       at the rightmost bit.
!      Bit 15 -  8  7  6  5  4  3  2  1  0
!      fpr 15 -  8  7  5  3  1  6  4  2  0
!      reg 31 - 24 23 22 21 20 19 18 17 16  */
    unsigned int fpr_bitmap;
  
    /* Number of floating point registers f8-f15 which must be saved.  */
--- 333,341 ----
    /* Bits standing for floating point registers. Set, if the
       respective register has to be saved. Starting with reg 16 (f0)
       at the rightmost bit.
!      Bit 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
!      fpr 15 13 11  9 14 12 10  8  7  5  3  1  6  4  2  0
!      reg 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  */
    unsigned int fpr_bitmap;
  
    /* Number of floating point registers f8-f15 which must be saved.  */
*************** struct GTY(()) machine_function
*** 380,388 ****
  #define cfun_gprs_save_area_size ((cfun_frame_layout.last_save_gpr_slot -           \
    cfun_frame_layout.first_save_gpr_slot + 1) * UNITS_PER_LONG)
  #define cfun_set_fpr_save(REGNO) (cfun->machine->frame_layout.fpr_bitmap |=    \
!   (1 << (REGNO - F0_REGNUM)))
  #define cfun_fpr_save_p(REGNO) (!!(cfun->machine->frame_layout.fpr_bitmap &    \
!   (1 << (REGNO - F0_REGNUM))))
  
  /* Number of GPRs and FPRs used for argument passing.  */
  #define GP_ARG_NUM_REG 5
--- 380,388 ----
  #define cfun_gprs_save_area_size ((cfun_frame_layout.last_save_gpr_slot -           \
    cfun_frame_layout.first_save_gpr_slot + 1) * UNITS_PER_LONG)
  #define cfun_set_fpr_save(REGNO) (cfun->machine->frame_layout.fpr_bitmap |=    \
!   (1 << (REGNO - FPR0_REGNUM)))
  #define cfun_fpr_save_p(REGNO) (!!(cfun->machine->frame_layout.fpr_bitmap &    \
!   (1 << (REGNO - FPR0_REGNUM))))
  
  /* Number of GPRs and FPRs used for argument passing.  */
  #define GP_ARG_NUM_REG 5
*************** s390_frame_area (int *area_bottom, int *
*** 7472,7483 ****
  
    if (!TARGET_64BIT)
      {
!       if (cfun_fpr_save_p (F4_REGNUM))
  	{
  	  b = MIN (b, cfun_frame_layout.f4_offset);
  	  t = MAX (t, cfun_frame_layout.f4_offset + 8);
  	}
!       if (cfun_fpr_save_p (F6_REGNUM))
  	{
  	  b = MIN (b, cfun_frame_layout.f4_offset + 8);
  	  t = MAX (t, cfun_frame_layout.f4_offset + 16);
--- 7472,7483 ----
  
    if (!TARGET_64BIT)
      {
!       if (cfun_fpr_save_p (FPR4_REGNUM))
  	{
  	  b = MIN (b, cfun_frame_layout.f4_offset);
  	  t = MAX (t, cfun_frame_layout.f4_offset + 8);
  	}
!       if (cfun_fpr_save_p (FPR6_REGNUM))
  	{
  	  b = MIN (b, cfun_frame_layout.f4_offset + 8);
  	  t = MAX (t, cfun_frame_layout.f4_offset + 16);
*************** s390_register_info (int clobbered_regs[]
*** 7509,7515 ****
        cfun_frame_layout.fpr_bitmap = 0;
        cfun_frame_layout.high_fprs = 0;
        if (TARGET_64BIT)
! 	for (i = F8_REGNUM; i <= F15_REGNUM; i++)
  	  /* During reload we have to use the df_regs_ever_live infos
  	     since reload is marking FPRs used as spill slots there as
  	     live before actually making the code changes.  Without
--- 7509,7515 ----
        cfun_frame_layout.fpr_bitmap = 0;
        cfun_frame_layout.high_fprs = 0;
        if (TARGET_64BIT)
! 	for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
  	  /* During reload we have to use the df_regs_ever_live infos
  	     since reload is marking FPRs used as spill slots there as
  	     live before actually making the code changes.  Without
*************** s390_register_info (int clobbered_regs[]
*** 7648,7663 ****
  	    min_fpr = 0;
  
  	  for (i = min_fpr; i < max_fpr; i++)
! 	    cfun_set_fpr_save (i + F0_REGNUM);
  	}
      }
  
    if (!TARGET_64BIT)
      {
!       if (df_regs_ever_live_p (F4_REGNUM) && !global_regs[F4_REGNUM])
! 	cfun_set_fpr_save (F4_REGNUM);
!       if (df_regs_ever_live_p (F6_REGNUM) && !global_regs[F6_REGNUM])
! 	cfun_set_fpr_save (F6_REGNUM);
      }
  }
  
--- 7648,7663 ----
  	    min_fpr = 0;
  
  	  for (i = min_fpr; i < max_fpr; i++)
! 	    cfun_set_fpr_save (i + FPR0_REGNUM);
  	}
      }
  
    if (!TARGET_64BIT)
      {
!       if (df_regs_ever_live_p (FPR4_REGNUM) && !global_regs[FPR4_REGNUM])
! 	cfun_set_fpr_save (FPR4_REGNUM);
!       if (df_regs_ever_live_p (FPR6_REGNUM) && !global_regs[FPR6_REGNUM])
! 	cfun_set_fpr_save (FPR6_REGNUM);
      }
  }
  
*************** s390_frame_info (void)
*** 7694,7706 ****
  	{
  	  cfun_frame_layout.f4_offset
  	    = (cfun_frame_layout.gprs_offset
! 	       - 8 * (cfun_fpr_save_p (F4_REGNUM)
! 		      + cfun_fpr_save_p (F6_REGNUM)));
  
  	  cfun_frame_layout.f0_offset
  	    = (cfun_frame_layout.f4_offset
! 	       - 8 * (cfun_fpr_save_p (F0_REGNUM)
! 		      + cfun_fpr_save_p (F2_REGNUM)));
  	}
        else
  	{
--- 7694,7706 ----
  	{
  	  cfun_frame_layout.f4_offset
  	    = (cfun_frame_layout.gprs_offset
! 	       - 8 * (cfun_fpr_save_p (FPR4_REGNUM)
! 		      + cfun_fpr_save_p (FPR6_REGNUM)));
  
  	  cfun_frame_layout.f0_offset
  	    = (cfun_frame_layout.f4_offset
! 	       - 8 * (cfun_fpr_save_p (FPR0_REGNUM)
! 		      + cfun_fpr_save_p (FPR2_REGNUM)));
  	}
        else
  	{
*************** s390_frame_info (void)
*** 7709,7734 ****
  	  cfun_frame_layout.f0_offset
  	    = ((cfun_frame_layout.gprs_offset
  		& ~(STACK_BOUNDARY / BITS_PER_UNIT - 1))
! 	       - 8 * (cfun_fpr_save_p (F0_REGNUM)
! 		      + cfun_fpr_save_p (F2_REGNUM)));
  
  	  cfun_frame_layout.f4_offset
  	    = (cfun_frame_layout.f0_offset
! 	       - 8 * (cfun_fpr_save_p (F4_REGNUM)
! 		      + cfun_fpr_save_p (F6_REGNUM)));
  	}
      }
    else /* no backchain */
      {
        cfun_frame_layout.f4_offset
  	= (STACK_POINTER_OFFSET
! 	   - 8 * (cfun_fpr_save_p (F4_REGNUM)
! 		  + cfun_fpr_save_p (F6_REGNUM)));
  
        cfun_frame_layout.f0_offset
  	= (cfun_frame_layout.f4_offset
! 	   - 8 * (cfun_fpr_save_p (F0_REGNUM)
! 		  + cfun_fpr_save_p (F2_REGNUM)));
  
        cfun_frame_layout.gprs_offset
  	= cfun_frame_layout.f0_offset - cfun_gprs_save_area_size;
--- 7709,7734 ----
  	  cfun_frame_layout.f0_offset
  	    = ((cfun_frame_layout.gprs_offset
  		& ~(STACK_BOUNDARY / BITS_PER_UNIT - 1))
! 	       - 8 * (cfun_fpr_save_p (FPR0_REGNUM)
! 		      + cfun_fpr_save_p (FPR2_REGNUM)));
  
  	  cfun_frame_layout.f4_offset
  	    = (cfun_frame_layout.f0_offset
! 	       - 8 * (cfun_fpr_save_p (FPR4_REGNUM)
! 		      + cfun_fpr_save_p (FPR6_REGNUM)));
  	}
      }
    else /* no backchain */
      {
        cfun_frame_layout.f4_offset
  	= (STACK_POINTER_OFFSET
! 	   - 8 * (cfun_fpr_save_p (FPR4_REGNUM)
! 		  + cfun_fpr_save_p (FPR6_REGNUM)));
  
        cfun_frame_layout.f0_offset
  	= (cfun_frame_layout.f4_offset
! 	   - 8 * (cfun_fpr_save_p (FPR0_REGNUM)
! 		  + cfun_fpr_save_p (FPR2_REGNUM)));
  
        cfun_frame_layout.gprs_offset
  	= cfun_frame_layout.f0_offset - cfun_gprs_save_area_size;
*************** s390_frame_info (void)
*** 7760,7766 ****
  
        cfun_frame_layout.frame_size += cfun_frame_layout.high_fprs * 8;
  
!       for (i = F0_REGNUM; i <= F7_REGNUM; i++)
  	if (cfun_fpr_save_p (i))
  	  cfun_frame_layout.frame_size += 8;
  
--- 7760,7766 ----
  
        cfun_frame_layout.frame_size += cfun_frame_layout.high_fprs * 8;
  
!       for (i = FPR0_REGNUM; i <= FPR7_REGNUM; i++)
  	if (cfun_fpr_save_p (i))
  	  cfun_frame_layout.frame_size += 8;
  
*************** s390_emit_prologue (void)
*** 8466,8472 ****
    offset = cfun_frame_layout.f0_offset;
  
    /* Save f0 and f2.  */
!   for (i = F0_REGNUM; i <= F0_REGNUM + 1; i++)
      {
        if (cfun_fpr_save_p (i))
  	{
--- 8466,8472 ----
    offset = cfun_frame_layout.f0_offset;
  
    /* Save f0 and f2.  */
!   for (i = FPR0_REGNUM; i <= FPR0_REGNUM + 1; i++)
      {
        if (cfun_fpr_save_p (i))
  	{
*************** s390_emit_prologue (void)
*** 8479,8485 ****
  
    /* Save f4 and f6.  */
    offset = cfun_frame_layout.f4_offset;
!   for (i = F4_REGNUM; i <= F4_REGNUM + 1; i++)
      {
        if (cfun_fpr_save_p (i))
  	{
--- 8479,8485 ----
  
    /* Save f4 and f6.  */
    offset = cfun_frame_layout.f4_offset;
!   for (i = FPR4_REGNUM; i <= FPR4_REGNUM + 1; i++)
      {
        if (cfun_fpr_save_p (i))
  	{
*************** s390_emit_prologue (void)
*** 8502,8508 ****
        offset = (cfun_frame_layout.f8_offset
  		+ (cfun_frame_layout.high_fprs - 1) * 8);
  
!       for (i = F15_REGNUM; i >= F8_REGNUM && offset >= 0; i--)
  	if (cfun_fpr_save_p (i))
  	  {
  	    insn = save_fpr (stack_pointer_rtx, offset, i);
--- 8502,8508 ----
        offset = (cfun_frame_layout.f8_offset
  		+ (cfun_frame_layout.high_fprs - 1) * 8);
  
!       for (i = FPR15_REGNUM; i >= FPR8_REGNUM && offset >= 0; i--)
  	if (cfun_fpr_save_p (i))
  	  {
  	    insn = save_fpr (stack_pointer_rtx, offset, i);
*************** s390_emit_prologue (void)
*** 8515,8521 ****
      }
  
    if (!TARGET_PACKED_STACK)
!     next_fpr = cfun_save_high_fprs_p ? F15_REGNUM : 0;
  
    if (flag_stack_usage_info)
      current_function_static_stack_size = cfun_frame_layout.frame_size;
--- 8515,8521 ----
      }
  
    if (!TARGET_PACKED_STACK)
!     next_fpr = cfun_save_high_fprs_p ? FPR15_REGNUM : 0;
  
    if (flag_stack_usage_info)
      current_function_static_stack_size = cfun_frame_layout.frame_size;
*************** s390_emit_prologue (void)
*** 8660,8666 ****
  
        offset = 0;
  
!       for (i = F8_REGNUM; i <= next_fpr; i++)
  	if (cfun_fpr_save_p (i))
  	  {
  	    rtx addr = plus_constant (Pmode, stack_pointer_rtx,
--- 8660,8666 ----
  
        offset = 0;
  
!       for (i = FPR8_REGNUM; i <= next_fpr; i++)
  	if (cfun_fpr_save_p (i))
  	  {
  	    rtx addr = plus_constant (Pmode, stack_pointer_rtx,
*************** s390_emit_epilogue (bool sibcall)
*** 8790,8796 ****
        if (cfun_save_high_fprs_p)
  	{
  	  next_offset = cfun_frame_layout.f8_offset;
! 	  for (i = F8_REGNUM; i <= F15_REGNUM; i++)
  	    {
  	      if (cfun_fpr_save_p (i))
  		{
--- 8790,8796 ----
        if (cfun_save_high_fprs_p)
  	{
  	  next_offset = cfun_frame_layout.f8_offset;
! 	  for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
  	    {
  	      if (cfun_fpr_save_p (i))
  		{
*************** s390_emit_epilogue (bool sibcall)
*** 8809,8815 ****
      {
        next_offset = cfun_frame_layout.f4_offset;
        /* f4, f6 */
!       for (i = F4_REGNUM; i <= F4_REGNUM + 1; i++)
  	{
  	  if (cfun_fpr_save_p (i))
  	    {
--- 8809,8815 ----
      {
        next_offset = cfun_frame_layout.f4_offset;
        /* f4, f6 */
!       for (i = FPR4_REGNUM; i <= FPR4_REGNUM + 1; i++)
  	{
  	  if (cfun_fpr_save_p (i))
  	    {
*************** s390_conditional_register_usage (void)
*** 10518,10535 ****
      }
    if (TARGET_64BIT)
      {
!       for (i = F8_REGNUM; i <= F15_REGNUM; i++)
  	call_used_regs[i] = call_really_used_regs[i] = 0;
      }
    else
      {
!       call_used_regs[F4_REGNUM] = call_really_used_regs[F4_REGNUM] = 0;
!       call_used_regs[F6_REGNUM] = call_really_used_regs[F6_REGNUM] = 0;
      }
  
    if (TARGET_SOFT_FLOAT)
      {
!       for (i = F0_REGNUM; i <= F15_REGNUM; i++)
  	call_used_regs[i] = fixed_regs[i] = 1;
      }
  }
--- 10518,10535 ----
      }
    if (TARGET_64BIT)
      {
!       for (i = FPR8_REGNUM; i <= FPR15_REGNUM; i++)
  	call_used_regs[i] = call_really_used_regs[i] = 0;
      }
    else
      {
!       call_used_regs[FPR4_REGNUM] = call_really_used_regs[FPR4_REGNUM] = 0;
!       call_used_regs[FPR6_REGNUM] = call_really_used_regs[FPR6_REGNUM] = 0;
      }
  
    if (TARGET_SOFT_FLOAT)
      {
!       for (i = FPR0_REGNUM; i <= FPR15_REGNUM; i++)
  	call_used_regs[i] = fixed_regs[i] = 1;
      }
  }
Index: gcc/config/s390/s390.h
===================================================================
*** gcc/config/s390/s390.h.orig
--- gcc/config/s390/s390.h
*************** enum reg_class
*** 477,499 ****
    { 0xffffffff, 0x0000003f },	/* ALL_REGS */		\
  }
  
- #define F0_REGNUM  16
- #define F1_REGNUM  20
- #define F2_REGNUM  17
- #define F3_REGNUM  21
- #define F4_REGNUM  18
- #define F5_REGNUM  22
- #define F6_REGNUM  19
- #define F7_REGNUM  23
- #define F8_REGNUM  24
- #define F9_REGNUM  25
- #define F10_REGNUM 26
- #define F11_REGNUM 27
- #define F12_REGNUM 28
- #define F13_REGNUM 29
- #define F14_REGNUM 30
- #define F15_REGNUM 31
- 
  /* In some case register allocation order is not enough for IRA to
     generate a good code.  The following macro (if defined) increases
     cost of REGNO for a pseudo approximately by pseudo usage frequency
--- 477,482 ----
Index: gcc/config/s390/s390.md
===================================================================
*** gcc/config/s390/s390.md.orig
--- gcc/config/s390/s390.md
***************
*** 183,189 ****
     (GPR0_REGNUM                  0)
     ; Floating point registers.
     (FPR0_REGNUM                 16)
!    (FPR2_REGNUM                 18)
    ])
  
  ;;
--- 183,203 ----
     (GPR0_REGNUM                  0)
     ; Floating point registers.
     (FPR0_REGNUM                 16)
!    (FPR1_REGNUM                 20)
!    (FPR2_REGNUM                 17)
!    (FPR3_REGNUM                 21)
!    (FPR4_REGNUM                 18)
!    (FPR5_REGNUM                 22)
!    (FPR6_REGNUM                 19)
!    (FPR7_REGNUM                 23)
!    (FPR8_REGNUM                 24)
!    (FPR9_REGNUM                 28)
!    (FPR10_REGNUM                25)
!    (FPR11_REGNUM                29)
!    (FPR12_REGNUM                26)
!    (FPR13_REGNUM                30)
!    (FPR14_REGNUM                27)
!    (FPR15_REGNUM                31)
    ])
  
  ;;
***************
*** 4405,4411 ****
  
  (define_insn "*trunc<BFP:mode><DFP_ALL:mode>2"
    [(set (reg:DFP_ALL FPR0_REGNUM)
!         (float_truncate:DFP_ALL (reg:BFP FPR2_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
--- 4419,4425 ----
  
  (define_insn "*trunc<BFP:mode><DFP_ALL:mode>2"
    [(set (reg:DFP_ALL FPR0_REGNUM)
!         (float_truncate:DFP_ALL (reg:BFP FPR4_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
***************
*** 4413,4430 ****
  
  (define_insn "*trunc<DFP_ALL:mode><BFP:mode>2"
    [(set (reg:BFP FPR0_REGNUM)
!         (float_truncate:BFP (reg:DFP_ALL FPR2_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
    "pfpo")
  
  (define_expand "trunc<BFP:mode><DFP_ALL:mode>2"
!   [(set (reg:BFP FPR2_REGNUM) (match_operand:BFP 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
      [(set (reg:DFP_ALL FPR0_REGNUM)
!           (float_truncate:DFP_ALL (reg:BFP FPR2_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:DFP_ALL 0 "nonimmediate_operand" "")
--- 4427,4444 ----
  
  (define_insn "*trunc<DFP_ALL:mode><BFP:mode>2"
    [(set (reg:BFP FPR0_REGNUM)
!         (float_truncate:BFP (reg:DFP_ALL FPR4_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
    "pfpo")
  
  (define_expand "trunc<BFP:mode><DFP_ALL:mode>2"
!   [(set (reg:BFP FPR4_REGNUM) (match_operand:BFP 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
      [(set (reg:DFP_ALL FPR0_REGNUM)
!           (float_truncate:DFP_ALL (reg:BFP FPR4_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:DFP_ALL 0 "nonimmediate_operand" "")
***************
*** 4442,4452 ****
  })
  
  (define_expand "trunc<DFP_ALL:mode><BFP:mode>2"
!   [(set (reg:DFP_ALL FPR2_REGNUM)
          (match_operand:DFP_ALL 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
!     [(set (reg:BFP FPR0_REGNUM) (float_truncate:BFP (reg:DFP_ALL FPR2_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:BFP 0 "nonimmediate_operand" "") (reg:BFP FPR0_REGNUM))]
--- 4456,4466 ----
  })
  
  (define_expand "trunc<DFP_ALL:mode><BFP:mode>2"
!   [(set (reg:DFP_ALL FPR4_REGNUM)
          (match_operand:DFP_ALL 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
!     [(set (reg:BFP FPR0_REGNUM) (float_truncate:BFP (reg:DFP_ALL FPR4_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:BFP 0 "nonimmediate_operand" "") (reg:BFP FPR0_REGNUM))]
***************
*** 4467,4491 ****
  ;
  
  (define_insn "*extend<BFP:mode><DFP_ALL:mode>2"
!   [(set (reg:DFP_ALL FPR0_REGNUM) (float_extend:DFP_ALL (reg:BFP FPR2_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
    "pfpo")
  
  (define_insn "*extend<DFP_ALL:mode><BFP:mode>2"
!   [(set (reg:BFP FPR0_REGNUM) (float_extend:BFP (reg:DFP_ALL FPR2_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
    "pfpo")
  
  (define_expand "extend<BFP:mode><DFP_ALL:mode>2"
!   [(set (reg:BFP FPR2_REGNUM) (match_operand:BFP 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
      [(set (reg:DFP_ALL FPR0_REGNUM)
!           (float_extend:DFP_ALL (reg:BFP FPR2_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:DFP_ALL 0 "nonimmediate_operand" "")
--- 4481,4505 ----
  ;
  
  (define_insn "*extend<BFP:mode><DFP_ALL:mode>2"
!   [(set (reg:DFP_ALL FPR0_REGNUM) (float_extend:DFP_ALL (reg:BFP FPR4_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
    "pfpo")
  
  (define_insn "*extend<DFP_ALL:mode><BFP:mode>2"
!   [(set (reg:BFP FPR0_REGNUM) (float_extend:BFP (reg:DFP_ALL FPR4_REGNUM)))
     (use (reg:SI GPR0_REGNUM))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_HARD_DFP"
    "pfpo")
  
  (define_expand "extend<BFP:mode><DFP_ALL:mode>2"
!   [(set (reg:BFP FPR4_REGNUM) (match_operand:BFP 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
      [(set (reg:DFP_ALL FPR0_REGNUM)
!           (float_extend:DFP_ALL (reg:BFP FPR4_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:DFP_ALL 0 "nonimmediate_operand" "")
***************
*** 4503,4513 ****
  })
  
  (define_expand "extend<DFP_ALL:mode><BFP:mode>2"
!   [(set (reg:DFP_ALL FPR2_REGNUM)
          (match_operand:DFP_ALL 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
!     [(set (reg:BFP FPR0_REGNUM) (float_extend:BFP (reg:DFP_ALL FPR2_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:BFP 0 "nonimmediate_operand" "") (reg:BFP FPR0_REGNUM))]
--- 4517,4527 ----
  })
  
  (define_expand "extend<DFP_ALL:mode><BFP:mode>2"
!   [(set (reg:DFP_ALL FPR4_REGNUM)
          (match_operand:DFP_ALL 1 "nonimmediate_operand" ""))
     (set (reg:SI GPR0_REGNUM) (match_dup 2))
     (parallel
!     [(set (reg:BFP FPR0_REGNUM) (float_extend:BFP (reg:DFP_ALL FPR4_REGNUM)))
       (use (reg:SI GPR0_REGNUM))
       (clobber (reg:CC CC_REGNUM))])
     (set (match_operand:BFP 0 "nonimmediate_operand" "") (reg:BFP FPR0_REGNUM))]



More information about the Gcc-patches mailing list