a247040
diff -up gromacs-5.1/src/gromacs/simd/impl_ibm_vsx/impl_ibm_vsx.h.vsx gromacs-5.1/src/gromacs/simd/impl_ibm_vsx/impl_ibm_vsx.h
a247040
--- gromacs-5.1/src/gromacs/simd/impl_ibm_vsx/impl_ibm_vsx.h.vsx	2015-08-13 13:48:09.000000000 +0200
a247040
+++ gromacs-5.1/src/gromacs/simd/impl_ibm_vsx/impl_ibm_vsx.h	2015-08-24 10:07:34.819414371 +0200
a247040
@@ -260,7 +260,7 @@
a247040
 #define gmx_simd_min_d(a, b)       vec_min(a, b)
a247040
 #if defined(__GNUC__) && !defined(__ibmxl__) && !defined(__xlC__)
a247040
 /* gcc up to at least version 4.9 does not support vec_round() in double precision. */
a247040
-#    define gmx_simd_round_d(a)    ({ __vector double res; __asm__ ("xvrdpi %0,%1" : "=ww" (res) : "ww" ((__vector double) (a))); res; })
a247040
+#    define gmx_simd_round_d(a)    ({ __vector double res; __asm__ ("xvrdpi %x0,%x1" : "=wd" (res) : "wd" ((__vector double) (a))); res; })
a247040
 #else
a247040
 /* IBM xlC */
a247040
 #    define gmx_simd_round_d(a)    vec_round(a)
a247040
@@ -334,8 +334,8 @@
a247040
 
a247040
 #if defined(__GNUC__) && !defined(__ibmxl__) && !defined(__xlC__)
a247040
 /* gcc-4.9 is missing double-to-float/float-to-double conversions. */
a247040
-#    define gmx_vsx_f2d(x) ({ __vector double res; __asm__ ("xvcvspdp %0,%1" : "=ww" (res) : "ww" ((__vector float) (x))); res; })
a247040
-#    define gmx_vsx_d2f(x) ({ __vector float res; __asm__ ("xvcvdpsp %0,%1" : "=ww" (res) : "ww" ((__vector double) (x))); res; })
a247040
+#    define gmx_vsx_f2d(x) ({ __vector double res; __asm__ ("xvcvspdp %x0,%x1" : "=wd" (res) : "wf" ((__vector float) (x))); res; })
a247040
+#    define gmx_vsx_d2f(x) ({ __vector float res; __asm__ ("xvcvdpsp %x0,%x1" : "=wf" (res) : "wd" ((__vector double) (x))); res; })
a247040
 #else
a247040
 /* f2d and d2f are indeed identical on xlC; it is selected by the argument and result type. */
a247040
 #    define gmx_vsx_f2d(x)       vec_cvf(x)
a247040
@@ -438,7 +438,7 @@ gmx_simd_cvtt_d2i_ibm_vsx(gmx_simd_doubl
a247040
     const __vector unsigned char perm = {4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11};
a247040
     gmx_simd_dint32_t            ix;
a247040
 
a247040
-    __asm__ ("xvcvdpsxws %0,%1" : "=ww" (ix) : "ww" ((__vector double) (x)));
a247040
+    __asm__ ("xvcvdpsxws %x0,%x1" : "=wa" (ix) : "wd" (x));
a247040
 
a247040
     return vec_perm(ix, ix, perm);
a247040
 }
a247040
@@ -449,7 +449,7 @@ gmx_simd_cvt_i2d_ibm_vsx(gmx_simd_dint32
a247040
     const __vector unsigned char perm = {4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11};
a247040
     gmx_simd_double_t            x;
a247040
     ix = vec_perm(ix, ix, perm);
a247040
-    __asm__ ("xvcvsxwdp %0,%1" : "=ww" (x) : "ww" ((__vector signed int) (ix)));
a247040
+    __asm__ ("xvcvsxwdp %x0,%x1" : "=wd" (x) : "wa" (ix));
a247040
     return x;
a247040
 }
a247040
 #endif