This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: How to tell PPC assembler VSX is available?
On Mon, Mar 12, 2018 at 09:37:04AM -0400, Jeffrey Walton wrote:
> > Peter's advice is good; however you should use the *memory* as input
> > to your asm, not the address of the memory! Or if you really do not
> > want to, at least you have to describe that that memory is read. If
> > you do not care much about optimisation you can use a "memory" clobber
> > for that.
> In this context:
>
> >> uint32x4_p8 res;
> >> __asm(" lxvd2x %x0, %1, %2 \n\t"
> >> : "=wa" (res)
> >> : "g" (data), "g" (offset));
>
> So are you saying to use something along the lines of `"m" (*(const
> char (*)[10]) p)`. Maybe:
>
> uint32x4_p8 res;
> __asm(" lxvd2x %x0, %1, %2 \n\t"
> : "=wa" (res)
> : "m" (*(const unsigned int (*)[4]) data), "r" (offset));
Something like
asm("lxvd2x %x0,%1" : "=wa"(res) : "Z"(data[offset/4]));
("Z", because the lxvd2x instruction only allows reg+reg addressing).
It is even better to not write load/store instruction in asm at all, let
the compiler figure it out. Work _with_ the compiler, not against it.
And use builtins instead of asm where you can.
Segher