This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

i386.c patch


This patch fixes two problems I uncovered in i386.c using
some runtime checking of rtl types at the time the rtl access
macros are used.  The first problem showed up as use of INTVAL
on something other than a CONST_INT, while the second was using
SET_SRC(insn) where SET_SRC(PATTERN(insn)) was intended.


   Alasdair.



Sun Jul  5 00:38:23 BST 1998	Alasdair Baird	<alasdair@wildcat.demon.co.uk>

    i386.c (output_pic_addr_const): Check for CONST_INT before using INTVAL.
    (is_fp_dest): Look at PATTERN within insn.


    
*** i386.c.orig	Sat Jul  4 23:01:53 1998
--- i386.c	Sun Jul  5 00:16:57 1998
*************** output_pic_addr_const (file, x, code)
*** 3035,3048 ****
        if (GET_CODE (XEXP (x, 0)) == CONST_INT)
  	{
  	  output_pic_addr_const (file, XEXP (x, 0), code);
! 	  if (INTVAL (XEXP (x, 1)) >= 0)
  	    fprintf (file, "+");
  	  output_pic_addr_const (file, XEXP (x, 1), code);
  	}
        else
  	{
  	  output_pic_addr_const (file, XEXP (x, 1), code);
! 	  if (INTVAL (XEXP (x, 0)) >= 0)
  	    fprintf (file, "+");
  	  output_pic_addr_const (file, XEXP (x, 0), code);
  	}
--- 3035,3050 ----
        if (GET_CODE (XEXP (x, 0)) == CONST_INT)
  	{
  	  output_pic_addr_const (file, XEXP (x, 0), code);
! 	  if (GET_CODE (XEXP(x, 1)) != CONST_INT
! 	      || INTVAL (XEXP (x, 1)) >= 0)
  	    fprintf (file, "+");
  	  output_pic_addr_const (file, XEXP (x, 1), code);
  	}
        else
  	{
  	  output_pic_addr_const (file, XEXP (x, 1), code);
! 	  if (GET_CODE (XEXP(x, 0)) != CONST_INT
! 	      || INTVAL (XEXP (x, 0)) >= 0)
  	    fprintf (file, "+");
  	  output_pic_addr_const (file, XEXP (x, 0), code);
  	}
*************** is_fp_dest (insn)
*** 4840,4846 ****
  	  || GET_MODE (SET_DEST (PATTERN (insn))) == XFmode)
        && GET_CODE (SET_DEST (PATTERN (insn))) == REG
        && REGNO (SET_DEST (PATTERN (insn))) >= FIRST_FLOAT_REG
!       && GET_CODE (SET_SRC (insn)) != MEM)
      return 1;
  
    return 0;
--- 4842,4848 ----
  	  || GET_MODE (SET_DEST (PATTERN (insn))) == XFmode)
        && GET_CODE (SET_DEST (PATTERN (insn))) == REG
        && REGNO (SET_DEST (PATTERN (insn))) >= FIRST_FLOAT_REG
!       && GET_CODE (SET_SRC (PATTERN (insn))) != MEM)
      return 1;
  
    return 0;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]