Mark Wielaard 5fa4cb
commit 13b3c5c25500879aad0a682c6cced934def56e53
Mark Wielaard 5fa4cb
Author: carll <carll@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Mark Wielaard 5fa4cb
Date:   Fri Aug 9 21:55:45 2013 +0000
Mark Wielaard 5fa4cb
Mark Wielaard 5fa4cb
    The following instructions were introduced in the Power ISA 2.05
Mark Wielaard 5fa4cb
    (i.e., POWER6) - lfdp - stfdp - lfdpx - stfdpx These instructions were promptly
Mark Wielaard 5fa4cb
    deprecated (phased out) in ISA 2.06 (i.e., POWER7). Recent updates in binutils
Mark Wielaard 5fa4cb
    no longer supports these instructions unless the assembler is invoked with
Mark Wielaard 5fa4cb
    '-mpower6'. When 'make check' is run on valgrind when using such a newer
Mark Wielaard 5fa4cb
    binutils and running on a ppc64 system newer than POWER6, you get the
Mark Wielaard 5fa4cb
    following build error:
Mark Wielaard 5fa4cb
    y
Mark Wielaard 5fa4cb
    pc64_linux=1 -DVGPV_ppc64_linux_vanilla=1 -DVGA_SEC_ppc32=1 -DVGP_SEC_ppc64_linux=1 -Winline -Wall -Wshadow -g -Winline -Wall -Wshadow -g -I../../../include -m64 -Wno-long-long -Wwrite-strings -fno-stack-protector -Wno-write-strings -MT power_ISA2_05-power_ISA2_05.o -MD -MP -MF .deps/power_ISA2_05-power_ISA2_05.Tpo -c -o power_ISA2_05-power_ISA2_05.o `test -f 'power_ISA2_05.c' || echo './'`power_ISA2_05.c
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:Assembler messages:
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:387: Error: operand out of domain (31 is not a multiple of 4)
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:387: Error: syntax error; found `,', expected `('
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:387: Error: junk at end of line: `,9'
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:478: Error: operand out of domain (31 is not a multiple of 4)
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:478: Error: syntax error; found `,', expected `('
Mark Wielaard 5fa4cb
    /tmp/cciGIkGG.s:478: Error: junk at end of line: `,9'
Mark Wielaard 5fa4cb
    make[2]: *** [power_ISA2_05-power_ISA2_05.o] Error 1
Mark Wielaard 5fa4cb
    make[2]: Leaving directory `/tmp/Valgrind_review/valgrind_ISA2_05/memcheck/tests/ppc64'
Mark Wielaard 5fa4cb
    make[1]: *** [check-am] Error 2
Mark Wielaard 5fa4cb
    make[1]: Leaving directory `/tmp/Valgrind_review/valgrind_ISA2_05/memcheck/tests/ppc64' make: *** [check-recursive] Error 1
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    This patch fixes the problem by adding a configure check to determine if these
Mark Wielaard 5fa4cb
    phased out instructions are supported by the binutils, and the result of that
Mark Wielaard 5fa4cb
    configure check is used to decide whether or not to compile in the source for
Mark Wielaard 5fa4cb
    testing these instructions.
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    Bugzilla 323116
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    committed by Carl Love, carll@us.ibm.com
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13490 a5019735-40e9-0310-863c-91ae7b9d1cf9
Mark Wielaard 5fa4cb
Mark Wielaard 5fa4cb
diff --git a/configure.in b/configure.in
Mark Wielaard 5fa4cb
index 6ac32b0..5cf28a1 100644
Mark Wielaard 5fa4cb
--- a/configure.in
Mark Wielaard 5fa4cb
+++ b/configure.in
Mark Wielaard 5fa4cb
@@ -1771,6 +1771,28 @@ if test x$ac_have_as_ppc_mftocrf = xyes ; then
Mark Wielaard 5fa4cb
 fi
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
+# does the ppc assembler support "lfdp" and other phased out floating point insns?
Mark Wielaard 5fa4cb
+AC_MSG_CHECKING([if ppc32/64 asm supports phased out floating point instructions])
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
Mark Wielaard 5fa4cb
+  do { typedef struct {
Mark Wielaard 5fa4cb
+      double hi;
Mark Wielaard 5fa4cb
+      double lo;
Mark Wielaard 5fa4cb
+     } dbl_pair_t;
Mark Wielaard 5fa4cb
+     dbl_pair_t dbl_pair[3];
Mark Wielaard 5fa4cb
+     __asm__ volatile ("lfdp 10, %0"::"m" (dbl_pair[0]));
Mark Wielaard 5fa4cb
+   } while (0)
Mark Wielaard 5fa4cb
+]])], [
Mark Wielaard 5fa4cb
+ac_have_as_ppc_fpPO=yes
Mark Wielaard 5fa4cb
+AC_MSG_RESULT([yes])
Mark Wielaard 5fa4cb
+], [
Mark Wielaard 5fa4cb
+ac_have_as_ppc_fpPO=no
Mark Wielaard 5fa4cb
+AC_MSG_RESULT([no])
Mark Wielaard 5fa4cb
+])
Mark Wielaard 5fa4cb
+if test x$ac_have_as_ppc_fpPO = xyes ; then
Mark Wielaard 5fa4cb
+  AC_DEFINE(HAVE_AS_PPC_FPPO, 1, [Define to 1 if as supports floating point phased out category.])
Mark Wielaard 5fa4cb
+fi
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
 CFLAGS=$safe_CFLAGS
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 # does the x86/amd64 assembler understand SSE3 instructions?
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc32/Makefile.am b/memcheck/tests/ppc32/Makefile.am
Mark Wielaard 5fa4cb
index 40033fc..bd70eea 100644
Mark Wielaard 5fa4cb
--- a/memcheck/tests/ppc32/Makefile.am
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc32/Makefile.am
Mark Wielaard 5fa4cb
@@ -4,7 +4,8 @@ include $(top_srcdir)/Makefile.tool-tests.am
Mark Wielaard 5fa4cb
 dist_noinst_SCRIPTS = filter_stderr
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 EXTRA_DIST = $(noinst_SCRIPTS) \
Mark Wielaard 5fa4cb
-	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest
Mark Wielaard 5fa4cb
+	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest \
Mark Wielaard 5fa4cb
+	power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 check_PROGRAMS = \
Mark Wielaard 5fa4cb
 	power_ISA2_05
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc32/power_ISA2_05.c b/memcheck/tests/ppc32/power_ISA2_05.c
Mark Wielaard 5fa4cb
index 0178452..3736c27 100644
Mark Wielaard 5fa4cb
--- a/memcheck/tests/ppc32/power_ISA2_05.c
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc32/power_ISA2_05.c
Mark Wielaard 5fa4cb
@@ -1,4 +1,5 @@
Mark Wielaard 5fa4cb
 #include <stdio.h>
Mark Wielaard 5fa4cb
+#include <config.h>
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 double foo = -1.0;
Mark Wielaard 5fa4cb
 double FRT1;
Mark Wielaard 5fa4cb
@@ -65,9 +66,15 @@ void test_lfiwax()
Mark Wielaard 5fa4cb
 ** FPp	= leftmost 64 bits stored at DS(RA)
Mark Wielaard 5fa4cb
 ** FPp+1= rightmost 64 bits stored at DS(RA)
Mark Wielaard 5fa4cb
 ** FPp must be an even float register
Mark Wielaard 5fa4cb
+**
Mark Wielaard 5fa4cb
+** The [st|l]fdp[x] instructions were put into the "Floating-Point.Phased-Out"
Mark Wielaard 5fa4cb
+** category in ISA 2.06 (i.e., POWER7 timeframe).  If valgrind and its
Mark Wielaard 5fa4cb
+** testsuite are built with -mcpu=power7 (or later), then the assembler will
Mark Wielaard 5fa4cb
+** not recognize those phased out instructions.
Mark Wielaard 5fa4cb
 */
Mark Wielaard 5fa4cb
 void test_double_pair_instrs()
Mark Wielaard 5fa4cb
 {
Mark Wielaard 5fa4cb
+#ifdef HAVE_AS_PPC_FPPO
Mark Wielaard 5fa4cb
    typedef struct {
Mark Wielaard 5fa4cb
       double hi;
Mark Wielaard 5fa4cb
       double lo;
Mark Wielaard 5fa4cb
@@ -122,6 +129,7 @@ void test_double_pair_instrs()
Mark Wielaard 5fa4cb
    __asm__ volatile ("stfdpx 10, 20, 21");
Mark Wielaard 5fa4cb
    printf("stfdpx (%f, %f) => F_hi=%f, F_lo=%f\n",
Mark Wielaard 5fa4cb
           FRT1, FRT2, dbl_pair[2].hi, dbl_pair[2].lo);
Mark Wielaard 5fa4cb
+#endif
Mark Wielaard 5fa4cb
 }
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc32/power_ISA2_05.stdout.exp_Without_FPPO b/memcheck/tests/ppc32/power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
new file mode 120000
Mark Wielaard 5fa4cb
index 0000000..da5c109
Mark Wielaard 5fa4cb
--- /dev/null
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc32/power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
@@ -0,0 +1 @@
Mark Wielaard 5fa4cb
+../ppc64/power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
\ No newline at end of file
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc64/Makefile.am b/memcheck/tests/ppc64/Makefile.am
Mark Wielaard 5fa4cb
index a18afd7..96eb576 100644
Mark Wielaard 5fa4cb
--- a/memcheck/tests/ppc64/Makefile.am
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc64/Makefile.am
Mark Wielaard 5fa4cb
@@ -4,7 +4,8 @@ include $(top_srcdir)/Makefile.tool-tests.am
Mark Wielaard 5fa4cb
 dist_noinst_SCRIPTS = filter_stderr
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 EXTRA_DIST = $(noinst_SCRIPTS) \
Mark Wielaard 5fa4cb
-	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest
Mark Wielaard 5fa4cb
+	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest \
Mark Wielaard 5fa4cb
+	power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 check_PROGRAMS = \
Mark Wielaard 5fa4cb
 	power_ISA2_05
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc64/power_ISA2_05.c b/memcheck/tests/ppc64/power_ISA2_05.c
Mark Wielaard 5fa4cb
index 8c0eab9..f552dc4 100644
Mark Wielaard 5fa4cb
--- a/memcheck/tests/ppc64/power_ISA2_05.c
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc64/power_ISA2_05.c
Mark Wielaard 5fa4cb
@@ -1,4 +1,5 @@
Mark Wielaard 5fa4cb
 #include <stdio.h>
Mark Wielaard 5fa4cb
+#include <config.h>
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 double foo = -1.0;
Mark Wielaard 5fa4cb
 double FRT1;
Mark Wielaard 5fa4cb
@@ -63,9 +64,16 @@ void test_lfiwax()
Mark Wielaard 5fa4cb
 ** FPp	= leftmost 64 bits stored at DS(RA)
Mark Wielaard 5fa4cb
 ** FPp+1= rightmost 64 bits stored at DS(RA)
Mark Wielaard 5fa4cb
 ** FPp must be an even float register
Mark Wielaard 5fa4cb
+**
Mark Wielaard 5fa4cb
+** The [st|l]fdp[x] instructions were put into the "Floating-Point.Phased-Out"
Mark Wielaard 5fa4cb
+** category in ISA 2.06 (i.e., POWER7 timeframe).  If valgrind and its
Mark Wielaard 5fa4cb
+** testsuite are built with -mcpu=power7 (or later), then the assembler will
Mark Wielaard 5fa4cb
+** not recognize those phased out instructions.
Mark Wielaard 5fa4cb
+**
Mark Wielaard 5fa4cb
 */
Mark Wielaard 5fa4cb
 void test_double_pair_instrs()
Mark Wielaard 5fa4cb
 {
Mark Wielaard 5fa4cb
+#ifdef HAVE_AS_PPC_FPPO
Mark Wielaard 5fa4cb
    typedef struct {
Mark Wielaard 5fa4cb
       double hi;
Mark Wielaard 5fa4cb
       double lo;
Mark Wielaard 5fa4cb
@@ -120,6 +128,7 @@ void test_double_pair_instrs()
Mark Wielaard 5fa4cb
    __asm__ volatile ("stfdpx 10, 20, 21");
Mark Wielaard 5fa4cb
    printf("stfdpx (%f, %f) => F_hi=%f, F_lo=%f\n",
Mark Wielaard 5fa4cb
           FRT1, FRT2, dbl_pair[2].hi, dbl_pair[2].lo);
Mark Wielaard 5fa4cb
+#endif
Mark Wielaard 5fa4cb
 }
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc64/power_ISA2_05.stdout.exp_Without_FPPO b/memcheck/tests/ppc64/power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
new file mode 100644
Mark Wielaard 5fa4cb
index 0000000..1945526
Mark Wielaard 5fa4cb
--- /dev/null
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc64/power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
@@ -0,0 +1,119 @@
Mark Wielaard 5fa4cb
+lwarx => 0
Mark Wielaard 5fa4cb
+ldarx => bad0beef
Mark Wielaard 5fa4cb
+fcpsgn sign=10.101010, base=11.111111 => 11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=10.101010, base=-0.000000 => 0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=10.101010, base=0.000000 => 0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=10.101010, base=-11.111111 => 11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=-0.000000, base=11.111111 => -11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=-0.000000, base=-0.000000 => -0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=-0.000000, base=0.000000 => -0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=-0.000000, base=-11.111111 => -11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=0.000000, base=11.111111 => 11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=0.000000, base=-0.000000 => 0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=0.000000, base=0.000000 => 0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=0.000000, base=-11.111111 => 11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=-10.101010, base=11.111111 => -11.111111
Mark Wielaard 5fa4cb
+fcpsgn sign=-10.101010, base=-0.000000 => -0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=-10.101010, base=0.000000 => -0.000000
Mark Wielaard 5fa4cb
+fcpsgn sign=-10.101010, base=-11.111111 => -11.111111
Mark Wielaard 5fa4cb
+lfiwax (-1024.000000) => FRT=(ffffffff, c0900000)
Mark Wielaard 5fa4cb
+prtyd (0) => parity=0
Mark Wielaard 5fa4cb
+prtyw (0) => parity=0
Mark Wielaard 5fa4cb
+prtyd (1) => parity=1
Mark Wielaard 5fa4cb
+prtyw (1) => parity=1
Mark Wielaard 5fa4cb
+prtyd (2) => parity=0
Mark Wielaard 5fa4cb
+prtyw (2) => parity=0
Mark Wielaard 5fa4cb
+prtyd (3) => parity=1
Mark Wielaard 5fa4cb
+prtyw (3) => parity=1
Mark Wielaard 5fa4cb
+prtyd (4) => parity=0
Mark Wielaard 5fa4cb
+prtyw (4) => parity=0
Mark Wielaard 5fa4cb
+prtyd (5) => parity=1
Mark Wielaard 5fa4cb
+prtyw (5) => parity=1
Mark Wielaard 5fa4cb
+prtyd (6) => parity=0
Mark Wielaard 5fa4cb
+prtyw (6) => parity=0
Mark Wielaard 5fa4cb
+prtyd (7) => parity=1
Mark Wielaard 5fa4cb
+prtyw (7) => parity=1
Mark Wielaard 5fa4cb
+prtyd (8) => parity=0
Mark Wielaard 5fa4cb
+prtyw (8) => parity=0
Mark Wielaard 5fa4cb
+prtyd (9) => parity=1
Mark Wielaard 5fa4cb
+prtyw (9) => parity=1
Mark Wielaard 5fa4cb
+prtyd (a) => parity=0
Mark Wielaard 5fa4cb
+prtyw (a) => parity=0
Mark Wielaard 5fa4cb
+prtyd (b) => parity=1
Mark Wielaard 5fa4cb
+prtyw (b) => parity=1
Mark Wielaard 5fa4cb
+prtyd (c) => parity=0
Mark Wielaard 5fa4cb
+prtyw (c) => parity=0
Mark Wielaard 5fa4cb
+prtyd (d) => parity=1
Mark Wielaard 5fa4cb
+prtyw (d) => parity=1
Mark Wielaard 5fa4cb
+prtyd (e) => parity=0
Mark Wielaard 5fa4cb
+prtyw (e) => parity=0
Mark Wielaard 5fa4cb
+prtyd (f) => parity=1
Mark Wielaard 5fa4cb
+prtyw (f) => parity=1
Mark Wielaard 5fa4cb
+prtyd (10) => parity=0
Mark Wielaard 5fa4cb
+prtyw (10) => parity=0
Mark Wielaard 5fa4cb
+prtyd (11) => parity=1
Mark Wielaard 5fa4cb
+prtyw (11) => parity=1
Mark Wielaard 5fa4cb
+prtyd (12) => parity=0
Mark Wielaard 5fa4cb
+prtyw (12) => parity=0
Mark Wielaard 5fa4cb
+prtyd (13) => parity=1
Mark Wielaard 5fa4cb
+prtyw (13) => parity=1
Mark Wielaard 5fa4cb
+prtyd (14) => parity=0
Mark Wielaard 5fa4cb
+prtyw (14) => parity=0
Mark Wielaard 5fa4cb
+prtyd (15) => parity=1
Mark Wielaard 5fa4cb
+prtyw (15) => parity=1
Mark Wielaard 5fa4cb
+prtyd (16) => parity=0
Mark Wielaard 5fa4cb
+prtyw (16) => parity=0
Mark Wielaard 5fa4cb
+prtyd (17) => parity=1
Mark Wielaard 5fa4cb
+prtyw (17) => parity=1
Mark Wielaard 5fa4cb
+prtyd (18) => parity=0
Mark Wielaard 5fa4cb
+prtyw (18) => parity=0
Mark Wielaard 5fa4cb
+prtyd (19) => parity=1
Mark Wielaard 5fa4cb
+prtyw (19) => parity=1
Mark Wielaard 5fa4cb
+prtyd (1a) => parity=0
Mark Wielaard 5fa4cb
+prtyw (1a) => parity=0
Mark Wielaard 5fa4cb
+prtyd (1b) => parity=1
Mark Wielaard 5fa4cb
+prtyw (1b) => parity=1
Mark Wielaard 5fa4cb
+prtyd (1c) => parity=0
Mark Wielaard 5fa4cb
+prtyw (1c) => parity=0
Mark Wielaard 5fa4cb
+prtyd (1d) => parity=1
Mark Wielaard 5fa4cb
+prtyw (1d) => parity=1
Mark Wielaard 5fa4cb
+prtyd (1e) => parity=0
Mark Wielaard 5fa4cb
+prtyw (1e) => parity=0
Mark Wielaard 5fa4cb
+prtyd (1f) => parity=1
Mark Wielaard 5fa4cb
+prtyw (1f) => parity=1
Mark Wielaard 5fa4cb
+prtyd (20) => parity=0
Mark Wielaard 5fa4cb
+prtyw (20) => parity=0
Mark Wielaard 5fa4cb
+prtyd (21) => parity=1
Mark Wielaard 5fa4cb
+prtyw (21) => parity=1
Mark Wielaard 5fa4cb
+prtyd (22) => parity=0
Mark Wielaard 5fa4cb
+prtyw (22) => parity=0
Mark Wielaard 5fa4cb
+prtyd (23) => parity=1
Mark Wielaard 5fa4cb
+prtyw (23) => parity=1
Mark Wielaard 5fa4cb
+prtyd (24) => parity=0
Mark Wielaard 5fa4cb
+prtyw (24) => parity=0
Mark Wielaard 5fa4cb
+prtyd (25) => parity=1
Mark Wielaard 5fa4cb
+prtyw (25) => parity=1
Mark Wielaard 5fa4cb
+prtyd (26) => parity=0
Mark Wielaard 5fa4cb
+prtyw (26) => parity=0
Mark Wielaard 5fa4cb
+prtyd (27) => parity=1
Mark Wielaard 5fa4cb
+prtyw (27) => parity=1
Mark Wielaard 5fa4cb
+prtyd (28) => parity=0
Mark Wielaard 5fa4cb
+prtyw (28) => parity=0
Mark Wielaard 5fa4cb
+prtyd (29) => parity=1
Mark Wielaard 5fa4cb
+prtyw (29) => parity=1
Mark Wielaard 5fa4cb
+prtyd (2a) => parity=0
Mark Wielaard 5fa4cb
+prtyw (2a) => parity=0
Mark Wielaard 5fa4cb
+prtyd (2b) => parity=1
Mark Wielaard 5fa4cb
+prtyw (2b) => parity=1
Mark Wielaard 5fa4cb
+prtyd (2c) => parity=0
Mark Wielaard 5fa4cb
+prtyw (2c) => parity=0
Mark Wielaard 5fa4cb
+prtyd (2d) => parity=1
Mark Wielaard 5fa4cb
+prtyw (2d) => parity=1
Mark Wielaard 5fa4cb
+prtyd (2e) => parity=0
Mark Wielaard 5fa4cb
+prtyw (2e) => parity=0
Mark Wielaard 5fa4cb
+prtyd (2f) => parity=1
Mark Wielaard 5fa4cb
+prtyw (2f) => parity=1
Mark Wielaard 5fa4cb
+prtyd (30) => parity=0
Mark Wielaard 5fa4cb
+prtyw (30) => parity=0
Mark Wielaard 5fa4cb
+prtyd (31) => parity=1
Mark Wielaard 5fa4cb
+prtyw (31) => parity=1
Mark Wielaard 5fa4cb
diff -ur valgrind-3.8.1.orig/config.h.in valgrind-3.8.1/config.h.in
Mark Wielaard 5fa4cb
--- valgrind-3.8.1.orig/config.h.in	2013-08-14 17:58:25.970210332 +0200
Mark Wielaard 5fa4cb
+++ valgrind-3.8.1/config.h.in	2013-08-14 17:59:26.000000000 +0200
Mark Wielaard 5fa4cb
@@ -81,6 +81,9 @@
Mark Wielaard 5fa4cb
 /* Define to 1 if you have the <asm/unistd.h> header file. */
Mark Wielaard 5fa4cb
 #undef HAVE_ASM_UNISTD_H
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
+/* Define to 1 if as supports floating point phased out category. */
Mark Wielaard 5fa4cb
+#undef HAVE_AS_PPC_FPPO
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
 /* Define to 1 if as supports mtocrf/mfocrf. */
Mark Wielaard 5fa4cb
 #undef HAVE_AS_PPC_MFTOCRF
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
Only in valgrind-3.8.1: config.h.in~
Mark Wielaard 5fa4cb
diff -ur valgrind-3.8.1.orig/configure valgrind-3.8.1/configure
Mark Wielaard 5fa4cb
--- valgrind-3.8.1.orig/configure	2013-08-14 17:58:25.970210332 +0200
Mark Wielaard 5fa4cb
+++ valgrind-3.8.1/configure	2013-08-14 17:59:32.537941678 +0200
Mark Wielaard 5fa4cb
@@ -8134,6 +8134,49 @@
Mark Wielaard 5fa4cb
 fi
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
+# does the ppc assembler support "lfdp" and other phased out floating point insns?
Mark Wielaard 5fa4cb
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ppc32/64 asm supports phased out floating point instructions" >&5
Mark Wielaard 5fa4cb
+$as_echo_n "checking if ppc32/64 asm supports phased out floating point instructions... " >&6; }
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
Mark Wielaard 5fa4cb
+/* end confdefs.h.  */
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+int
Mark Wielaard 5fa4cb
+main ()
Mark Wielaard 5fa4cb
+{
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+  do { typedef struct {
Mark Wielaard 5fa4cb
+      double hi;
Mark Wielaard 5fa4cb
+      double lo;
Mark Wielaard 5fa4cb
+     } dbl_pair_t;
Mark Wielaard 5fa4cb
+     dbl_pair_t dbl_pair[3];
Mark Wielaard 5fa4cb
+     __asm__ volatile ("lfdp 10, %0"::"m" (dbl_pair[0]));
Mark Wielaard 5fa4cb
+   } while (0)
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+  ;
Mark Wielaard 5fa4cb
+  return 0;
Mark Wielaard 5fa4cb
+}
Mark Wielaard 5fa4cb
+_ACEOF
Mark Wielaard 5fa4cb
+if ac_fn_c_try_compile "$LINENO"; then :
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+ac_have_as_ppc_fpPO=yes
Mark Wielaard 5fa4cb
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
Mark Wielaard 5fa4cb
+$as_echo "yes" >&6; }
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+else
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+ac_have_as_ppc_fpPO=no
Mark Wielaard 5fa4cb
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
Mark Wielaard 5fa4cb
+$as_echo "no" >&6; }
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+fi
Mark Wielaard 5fa4cb
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
Mark Wielaard 5fa4cb
+if test x$ac_have_as_ppc_fpPO = xyes ; then
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+$as_echo "#define HAVE_AS_PPC_FPPO 1" >>confdefs.h
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
+fi
Mark Wielaard 5fa4cb
+
Mark Wielaard 5fa4cb
 CFLAGS=$safe_CFLAGS
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 # does the x86/amd64 assembler understand SSE3 instructions?
Mark Wielaard 5fa4cb
diff -ur valgrind-3.8.1.orig/memcheck/tests/ppc32/Makefile.in valgrind-3.8.1/memcheck/tests/ppc32/Makefile.in
Mark Wielaard 5fa4cb
--- valgrind-3.8.1.orig/memcheck/tests/ppc32/Makefile.in	2013-08-14 17:58:25.794211043 +0200
Mark Wielaard 5fa4cb
+++ valgrind-3.8.1/memcheck/tests/ppc32/Makefile.in	2013-08-14 17:59:30.729948971 +0200
Mark Wielaard 5fa4cb
@@ -362,7 +362,8 @@
Mark Wielaard 5fa4cb
 @VGCONF_OS_IS_DARWIN_TRUE@noinst_DSYMS = $(check_PROGRAMS)
Mark Wielaard 5fa4cb
 dist_noinst_SCRIPTS = filter_stderr
Mark Wielaard 5fa4cb
 EXTRA_DIST = $(noinst_SCRIPTS) \
Mark Wielaard 5fa4cb
-	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest
Mark Wielaard 5fa4cb
+	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest \
Mark Wielaard 5fa4cb
+	power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 power_ISA2_05_CFLAGS = $(AM_CFLAGS) $(WERROR) -Winline -Wall -Wshadow -g \
Mark Wielaard 5fa4cb
 		-I$(top_srcdir)/include @FLAG_M32@
Mark Wielaard 5fa4cb
diff -ur valgrind-3.8.1.orig/memcheck/tests/ppc64/Makefile.in valgrind-3.8.1/memcheck/tests/ppc64/Makefile.in
Mark Wielaard 5fa4cb
--- valgrind-3.8.1.orig/memcheck/tests/ppc64/Makefile.in	2013-08-14 17:58:25.789211063 +0200
Mark Wielaard 5fa4cb
+++ valgrind-3.8.1/memcheck/tests/ppc64/Makefile.in	2013-08-14 17:59:30.785948745 +0200
Mark Wielaard 5fa4cb
@@ -362,7 +362,8 @@
Mark Wielaard 5fa4cb
 @VGCONF_OS_IS_DARWIN_TRUE@noinst_DSYMS = $(check_PROGRAMS)
Mark Wielaard 5fa4cb
 dist_noinst_SCRIPTS = filter_stderr
Mark Wielaard 5fa4cb
 EXTRA_DIST = $(noinst_SCRIPTS) \
Mark Wielaard 5fa4cb
-	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest
Mark Wielaard 5fa4cb
+	power_ISA2_05.stderr.exp power_ISA2_05.stdout.exp power_ISA2_05.vgtest \
Mark Wielaard 5fa4cb
+	power_ISA2_05.stdout.exp_Without_FPPO
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 power_ISA2_05_CFLAGS = $(AM_CFLAGS) $(WERROR) -Winline -Wall -Wshadow -g \
Mark Wielaard 5fa4cb
 		-I$(top_srcdir)/include @FLAG_M64@
Mark Wielaard 5fa4cb
commit 5d0d52118210671d3eeff94fd3f5cc3807bd2a44
Mark Wielaard 5fa4cb
Author: sewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Mark Wielaard 5fa4cb
Date:   Tue Jan 29 22:14:01 2013 +0000
Mark Wielaard 5fa4cb
Mark Wielaard 5fa4cb
    test_reservation(), test_double_pair_instrs(): Fix broken inline assembly
Mark Wielaard 5fa4cb
    causing segfaults with gcc-4.7.  The inline assembly still isn't right,
Mark Wielaard 5fa4cb
    but it's better than it was before.
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    
Mark Wielaard 5fa4cb
    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13279 a5019735-40e9-0310-863c-91ae7b9d1cf9
Mark Wielaard 5fa4cb
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc32/power_ISA2_05.c b/memcheck/tests/ppc32/power_ISA2_05.c
Mark Wielaard 5fa4cb
index a95f427..0178452 100644
Mark Wielaard 5fa4cb
--- a/memcheck/tests/ppc32/power_ISA2_05.c
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc32/power_ISA2_05.c
Mark Wielaard 5fa4cb
@@ -103,8 +103,8 @@ void test_double_pair_instrs()
Mark Wielaard 5fa4cb
    FRT2 = -1.0;
Mark Wielaard 5fa4cb
    base = (unsigned long) &dbl_pair;
Mark Wielaard 5fa4cb
    offset = (unsigned long) &dbl_pair[1] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 20, 0, %0"::"r" (base));
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 20, %0, 0"::"r" (base));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("lfdpx 10, 20, 21");
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 10":"=f" (FRT1));
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 11":"=f" (FRT2));
Mark Wielaard 5fa4cb
@@ -115,8 +115,8 @@ void test_double_pair_instrs()
Mark Wielaard 5fa4cb
    FRT2 = -16.1024;
Mark Wielaard 5fa4cb
    base = (unsigned long) &dbl_pair;
Mark Wielaard 5fa4cb
    offset = (unsigned long) &dbl_pair[2] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 20, 0, %0"::"r" (base));
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 20, %0, 0"::"r" (base));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 10":"=f" (FRT1));
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 11":"=f" (FRT2));
Mark Wielaard 5fa4cb
    __asm__ volatile ("stfdpx 10, 20, 21");
Mark Wielaard 5fa4cb
@@ -168,14 +168,14 @@ void test_reservation()
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
    base = (unsigned long) &arr;
Mark Wielaard 5fa4cb
    offset = (unsigned long) &arr[1] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 20, 0, %0"::"r" (base));
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 20, %0, 0"::"r" (base));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("lwarx %0, 20, 21, 1":"=r" (RT));
Mark Wielaard 5fa4cb
    printf("lwarx => %x\n", RT);
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 #ifdef __powerpc64__
Mark Wielaard 5fa4cb
    offset = (unsigned long) &arr[1] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("ldarx %0, 20, 21, 1":"=r" (RT));
Mark Wielaard 5fa4cb
    printf("ldarx => %x\n", RT);
Mark Wielaard 5fa4cb
 #endif
Mark Wielaard 5fa4cb
diff --git a/memcheck/tests/ppc64/power_ISA2_05.c b/memcheck/tests/ppc64/power_ISA2_05.c
Mark Wielaard 5fa4cb
index dcf0e7a..8c0eab9 100644
Mark Wielaard 5fa4cb
--- a/memcheck/tests/ppc64/power_ISA2_05.c
Mark Wielaard 5fa4cb
+++ b/memcheck/tests/ppc64/power_ISA2_05.c
Mark Wielaard 5fa4cb
@@ -101,8 +101,8 @@ void test_double_pair_instrs()
Mark Wielaard 5fa4cb
    FRT2 = -1.0;
Mark Wielaard 5fa4cb
    base = (unsigned long) &dbl_pair;
Mark Wielaard 5fa4cb
    offset = (unsigned long) &dbl_pair[1] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 20, 0, %0"::"r" (base));
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 20, %0, 0"::"r" (base));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("lfdpx 10, 20, 21");
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 10":"=f" (FRT1));
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 11":"=f" (FRT2));
Mark Wielaard 5fa4cb
@@ -113,8 +113,8 @@ void test_double_pair_instrs()
Mark Wielaard 5fa4cb
    FRT2 = -16.1024;
Mark Wielaard 5fa4cb
    base = (unsigned long) &dbl_pair;
Mark Wielaard 5fa4cb
    offset = (unsigned long) &dbl_pair[2] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 20, 0, %0"::"r" (base));
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 20, %0, 0"::"r" (base));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 10":"=f" (FRT1));
Mark Wielaard 5fa4cb
    __asm__ volatile ("fmr %0, 11":"=f" (FRT2));
Mark Wielaard 5fa4cb
    __asm__ volatile ("stfdpx 10, 20, 21");
Mark Wielaard 5fa4cb
@@ -166,14 +166,14 @@ void test_reservation()
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
    base = (unsigned long) &arr;
Mark Wielaard 5fa4cb
    offset = (unsigned long) &arr[1] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 20, 0, %0"::"r" (base));
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 20, %0, 0"::"r" (base));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("lwarx %0, 20, 21, 1":"=r" (RT));
Mark Wielaard 5fa4cb
    printf("lwarx => %x\n", RT);
Mark Wielaard 5fa4cb
 
Mark Wielaard 5fa4cb
 #ifdef __powerpc64__
Mark Wielaard 5fa4cb
    offset = (unsigned long) &arr[1] - base;
Mark Wielaard 5fa4cb
-   __asm__ volatile ("or 21, 0, %0"::"r" (offset));
Mark Wielaard 5fa4cb
+   __asm__ volatile ("ori 21, %0, 0"::"r" (offset));
Mark Wielaard 5fa4cb
    __asm__ volatile ("ldarx %0, 20, 21, 1":"=r" (RT));
Mark Wielaard 5fa4cb
    printf("ldarx => %x\n", RT);
Mark Wielaard 5fa4cb
 #endif