[Simon Jenkins]
so saying
"=m" (d) causes xmm0 to be written to &d, not d, as
intended. if &d isn't 128-bit aligned, it will segfault now.
even if it is, that's not where we wanted the numbers from xmm0
to go ...
The discrepency here is because you originally said you were trying to
get the data into a named array of floats:
float t[4];
but it turns out you're actually trying to get them into some memory
to which you have a named pointer:
float *d;
Now, there are a great many circumstances in which you could treat
such names interchangeably, but this isn't one of them.
indeed it isn't, you're right. in fact, if i'm not mistaken it's the
first time ever i see this distinction make a difference.
i'm not at all convinced that gcc is doing the right thing here;
acting on the difference seems nonsensical to me.
The following code demonstrates
[...]
point taken. thanks!
when i look into the code in question the next time (it works well now
so not much incentive), i'll probably do a complete assembler rewrite.
no more messing with my pointers, mr. gcc, thanks.
tim