This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fix gcc test execute/ieee/fp-cmp-5.c on ia64


The problem is that "fcmp.ord" was being considered to
have a ".or" completer, so that

        fcmp.ord p6, p7 = f8, f9
        ;;
        (p6) addl r8 = 1, r0
        (p7) mov r8 = r0

would incorrectly generate a WAW warning.


r~


        * config/tc-ia64.c (has_suffix_p): New.
        (note_register_values): Use it instead of strstr.

Index: tc-ia64.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-ia64.c,v
retrieving revision 1.61
diff -c -p -d -r1.61 tc-ia64.c
*** tc-ia64.c	2001/11/28 17:00:44	1.61
--- tc-ia64.c	2002/01/01 01:14:05
*************** static void add_qp_imply PARAMS((int p1,
*** 732,737 ****
--- 733,739 ----
  static void clear_qp_branch_flag PARAMS((valueT mask));
  static void clear_qp_mutex PARAMS((valueT mask));
  static void clear_qp_implies PARAMS((valueT p1_mask, valueT p2_mask));
+ static int has_suffix_p PARAMS((const char *, const char *));
  static void clear_register_values PARAMS ((void));
  static void print_dependency PARAMS ((const char *action, int depind));
  static void instruction_serialization PARAMS ((void));
*************** add_qp_mutex (mask)
*** 8629,8634 ****
--- 8631,8649 ----
    qp_mutexes[qp_mutexeslen++].prmask = mask;
  }
  
+ static int
+ has_suffix_p (name, suffix)
+       const char *name;
+       const char *suffix;
+ {
+   size_t namelen = strlen (name);
+   size_t sufflen = strlen (suffix);
+ 
+   if (namelen <= sufflen)
+     return 0;
+   return strcmp (name + namelen - sufflen, suffix) == 0;
+ }
+ 
  static void
  clear_register_values ()
  {
*************** note_register_values (idesc)
*** 8746,8766 ****
  	}
        /* In general, clear mutexes and implies which include P1 or P2,
  	 with the following exceptions.  */
!       else if (strstr (idesc->name, ".or.andcm") != NULL)
  	{
  	  add_qp_mutex (p1mask | p2mask);
  	  clear_qp_implies (p2mask, p1mask);
- 	}
-       else if (strstr (idesc->name, ".and.orcm") != NULL)
- 	{
- 	  add_qp_mutex (p1mask | p2mask);
- 	  clear_qp_implies (p1mask, p2mask);
  	}
!       else if (strstr (idesc->name, ".and") != NULL)
  	{
  	  clear_qp_implies (0, p1mask | p2mask);
  	}
!       else if (strstr (idesc->name, ".or") != NULL)
  	{
  	  clear_qp_mutex (p1mask | p2mask);
  	  clear_qp_implies (p1mask | p2mask, 0);
--- 8761,8779 ----
  	}
        /* In general, clear mutexes and implies which include P1 or P2,
  	 with the following exceptions.  */
!       else if (has_suffix_p (idesc->name, ".or.andcm")
! 	       || has_suffix_p (idesc->name, ".and.orcm"))
  	{
  	  add_qp_mutex (p1mask | p2mask);
  	  clear_qp_implies (p2mask, p1mask);
  	}
!       else if (has_suffix_p (idesc->name, ".andcm")
! 	       || has_suffix_p (idesc->name, ".and"))
  	{
  	  clear_qp_implies (0, p1mask | p2mask);
  	}
!       else if (has_suffix_p (idesc->name, ".orcm")
! 	       || has_suffix_p (idesc->name, ".or"))
  	{
  	  clear_qp_mutex (p1mask | p2mask);
  	  clear_qp_implies (p1mask | p2mask, 0);
*************** note_register_values (idesc)
*** 8768,8774 ****
        else
  	{
  	  clear_qp_implies (p1mask | p2mask, p1mask | p2mask);
! 	  if (strstr (idesc->name, ".unc") != NULL)
  	    {
  	      add_qp_mutex (p1mask | p2mask);
  	      if (CURR_SLOT.qp_regno != 0)
--- 8781,8787 ----
        else
  	{
  	  clear_qp_implies (p1mask | p2mask, p1mask | p2mask);
! 	  if (has_suffix_p (idesc->name, ".unc"))
  	    {
  	      add_qp_mutex (p1mask | p2mask);
  	      if (CURR_SLOT.qp_regno != 0)


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