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