https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107757
--- Comment #3 from Michael Meissner <meissner at gcc dot gnu.org> --- As Segher says, the test is not quite correct. I would write it as: vector long long lsb64_opt() { vector long long a = vec_splats(~0LL); __asm__("vsrd %0,%1,%2":"=v"(a):"v"(a),"v"(a)); return a; } or: vector long long lsb64_opt() { vector long long a = vec_splats(~0LL); __asm__("vsrd %0,%1,%1":"=v"(a):"v"(a)); return a; } or even: vector long long lsb64_opt() { vector long long a = vec_splats(~0LL); __asm__("vsrd %0,%0,%0":"+v"(a)); return a; }