bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gas/3990] New: [PATCH] IA64 gas DV: reports spurious WAW hazards


From: klchxbec at freenet dot de
Subject: [Bug gas/3990] New: [PATCH] IA64 gas DV: reports spurious WAW hazards
Date: 7 Feb 2007 13:01:33 -0000

Here's a small patch to fix a spurious WAW hazard reported on this

for p2:



     {.mmi

     cmp.eq.or.andcm p3,p2=r49,r39

     cmp.ne.and      p2,p1=r49,r36

     nop.i           0 ;;

     }



Index: tc-ia64.c

===================================================================

RCS file: /cvs/src/src/gas/config/tc-ia64.c,v

retrieving revision 1.190

diff -b -u -r1.190 tc-ia64.c

--- tc-ia64.c   1 Feb 2007 14:12:18 -0000       1.190

+++ tc-ia64.c   3 Feb 2007 10:06:06 -0000

@@ -9001,14 +9001,18 @@

              int p2 = CURR_SLOT.opnd[1].X_add_number - REG_P;

              int or_andcm = strstr (idesc->name, "or.andcm") != NULL;

              int and_orcm = strstr (idesc->name, "and.orcm") != NULL;

+              int and = strstr (idesc->name, "and") != NULL;

+              int or = strstr (idesc->name, "or") != NULL;

 

              if ((idesc->operands[0] == IA64_OPND_P1

                   || idesc->operands[0] == IA64_OPND_P2)

                  && p1 >= 1 && p1 < 16)

                {

                  specs[count] = tmpl;

-                 specs[count].cmp_type =

-                   (or_andcm ? CMP_OR : (and_orcm ? CMP_AND : CMP_NONE));

+                  specs[count].cmp_type = (or_andcm ? CMP_OR :

+                                           (and_orcm ? CMP_AND :

+                                            (and ? CMP_AND :

+                                             (or ? CMP_OR : CMP_NONE))));

                  specs[count++].index = p1;

                }

              if ((idesc->operands[1] == IA64_OPND_P1

@@ -9016,8 +9020,10 @@

                  && p2 >= 1 && p2 < 16)

                {

                  specs[count] = tmpl;

-                 specs[count].cmp_type =

-                   (or_andcm ? CMP_AND : (and_orcm ? CMP_OR : CMP_NONE));

+                  specs[count].cmp_type = (or_andcm ? CMP_AND :

+                                           (and_orcm ? CMP_OR :

+                                            (and ? CMP_AND :

+                                             (or ? CMP_OR : CMP_NONE))));

                  specs[count++].index = p2;

                }

            }

@@ -9123,14 +9129,18 @@

              int p2 = CURR_SLOT.opnd[1].X_add_number - REG_P;

              int or_andcm = strstr (idesc->name, "or.andcm") != NULL;

              int and_orcm = strstr (idesc->name, "and.orcm") != NULL;

+              int and = strstr (idesc->name, "and") != NULL;

+              int or = strstr (idesc->name, "or") != NULL;

 

              if ((idesc->operands[0] == IA64_OPND_P1

                   || idesc->operands[0] == IA64_OPND_P2)

                  && p1 >= 16 && p1 < 63)

                {

                  specs[count] = tmpl;

-                 specs[count].cmp_type =

-                   (or_andcm ? CMP_OR : (and_orcm ? CMP_AND : CMP_NONE));

+                  specs[count].cmp_type = (or_andcm ? CMP_OR :

+                                           (and_orcm ? CMP_AND :

+                                            (and ? CMP_AND :

+                                             (or ? CMP_OR : CMP_NONE))));

                  specs[count++].index = p1;

                }

              if ((idesc->operands[1] == IA64_OPND_P1

@@ -9138,8 +9148,10 @@

                  && p2 >= 16 && p2 < 63)

                {

                  specs[count] = tmpl;

-                 specs[count].cmp_type =

-                   (or_andcm ? CMP_AND : (and_orcm ? CMP_OR : CMP_NONE));

+                  specs[count].cmp_type = (or_andcm ? CMP_AND :

+                                           (and_orcm ? CMP_OR :

+                                            (and ? CMP_AND :

+                                             (or ? CMP_OR : CMP_NONE))));

                  specs[count++].index = p2;

                }

            }

@@ -9587,22 +9599,28 @@

              int p2 = CURR_SLOT.opnd[1].X_add_number - REG_P;

              int or_andcm = strstr (idesc->name, "or.andcm") != NULL;

              int and_orcm = strstr (idesc->name, "and.orcm") != NULL;

+              int and = strstr (idesc->name, "and") != NULL;

+              int or = strstr (idesc->name, "or") != NULL;

 

              if (p1 == 63

                  && (idesc->operands[0] == IA64_OPND_P1

                      || idesc->operands[0] == IA64_OPND_P2))

                {

                  specs[count] = tmpl;

-                 specs[count++].cmp_type =

-                   (or_andcm ? CMP_OR : (and_orcm ? CMP_AND : CMP_NONE));

+                  specs[count].cmp_type = (or_andcm ? CMP_OR :

+                                           (and_orcm ? CMP_AND :

+                                            (and ? CMP_AND :

+                                             (or ? CMP_OR : CMP_NONE))));

                }

              if (p2 == 63

                  && (idesc->operands[1] == IA64_OPND_P1

                      || idesc->operands[1] == IA64_OPND_P2))

                {

                  specs[count] = tmpl;

-                 specs[count++].cmp_type =

-                   (or_andcm ? CMP_AND : (and_orcm ? CMP_OR : CMP_NONE));

+                  specs[count].cmp_type = (or_andcm ? CMP_AND :

+                                           (and_orcm ? CMP_OR :

+                                            (and ? CMP_AND :

+                                             (or ? CMP_OR : CMP_NONE))));

                }

            }

          else

-- 
           Summary: [PATCH] IA64 gas DV: reports spurious WAW hazards
           Product: binutils
           Version: 2.18 (HEAD)
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gas
        AssignedTo: unassigned at sources dot redhat dot com
        ReportedBy: klchxbec at freenet dot de
                CC: bug-binutils at gnu dot org
 GCC build triplet: elf32-ia64-hpux-big
  GCC host triplet: elf32-ia64-hpux-big
GCC target triplet: elf32-ia64-hpux-big


http://sourceware.org/bugzilla/show_bug.cgi?id=3990

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]