This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] MIPS: Fix __sync_nand for changed semantics.
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: David Daney <ddaney at caviumnetworks dot com>
- Date: Sat, 06 Dec 2008 19:14:18 +0100
- Subject: Re: [PATCH] MIPS: Fix __sync_nand for changed semantics.
Hello!
We do however suffer a new failure in gcc.target/mips/atomic-memory-1.c,
which is due to the change in semantics. Someone will have to fix this
with a separate patch to the testcase.
Can you test the attached patch? It should fix all remaining failures in
gcc.dg/mips directory.
Thanks,
Uros.
Index: fix-r10000-6.c
===================================================================
--- fix-r10000-6.c (revision 142523)
+++ fix-r10000-6.c (working copy)
@@ -2,6 +2,8 @@
/* { dg-mips-options "-O2 -march=mips4 -mfix-r10000" } */
/* { dg-final { scan-assembler-times "\tbeql\t" 3 } } */
+/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
+
NOMIPS16 int
f1 (int *z)
{
Index: fix-r10000-12.c
===================================================================
--- fix-r10000-12.c (revision 142523)
+++ fix-r10000-12.c (working copy)
@@ -2,6 +2,8 @@
/* { dg-mips-options "-O2 -march=mips4 -mfix-r10000" } */
/* { dg-final { scan-assembler-times "\tbeql\t" 3 } } */
+/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
+
NOMIPS16 int
f1 (int *z)
{
Index: atomic-memory-1.c
===================================================================
--- atomic-memory-1.c (revision 142523)
+++ atomic-memory-1.c (working copy)
@@ -1,4 +1,7 @@
/* { dg-do run } */
+
+/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
+
extern void abort (void);
extern void exit (int);
@@ -16,9 +19,9 @@ NOMIPS16 int main ()
__sync_sub_and_fetch (&v, 0x7fff);
if (v != 34465)
abort();
- if (__sync_nand_and_fetch (&v, 0xff) != 94)
+ if (__sync_nand_and_fetch (&v, 0xff) != -162)
abort();
- if (__sync_fetch_and_add (&v, 6) != 94)
+ if (__sync_fetch_and_add (&v, 262) != -162)
abort();
if (v != 100)
abort();