https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67291
Alan Modra <amodra at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amodra at gmail dot com --- Comment #2 from Alan Modra <amodra at gmail dot com> --- I think this is a user error. The "ww" constraint is for the single precision vsx insns, like xsaddsp. This constraint is only enabled for vsx regs when compiling with -mcpu=power8 (or when you compiler defaults to -mcpu=power8), or when explicitly enabled with -mupper-regs-sf. So if your compiler defaults to -mcpu=power7, you'll get the "impossible constraints" message. Reduced testcase, which compiles OK with -mcpu=power8, but fails with -mcpu=power7. __vector double gmx_simd_cvt_i2d_ibm_vsx(__vector signed int ix) { const __vector unsigned char perm = {4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11}; __vector double x; ix = __builtin_vec_perm(ix, ix, perm); __asm__ ("xvcvsxwdp %x0,%x1" : "=ww" (x) : "ww" (ix)); return x; } I believe the asm should be using "=wd" and "wa" constraints. Also, that vec_perm is a bit ugly. Putting the words of ix in the right place would better be done with xxsldwi.