The code is compiled so that the xmm/ymm registers are not available to
the compiler. Do you have any known examples of asm volatiles being
reordered *with respect to each other*? My understandings of gcc is
that volatile operations are ordered with respect to each other (not
necessarily with respect to non-volatile operations, though.)
Can you quote it from the manual? As I understand volatile as usual
is not clearly defined.
gcc has a lot of optimization passes and volatile bugs are common.
Either way, this implementatin technique was used for the MMX/SSE
implementations without any problems for 9 years now.
It's still wrong.
Lying to the compiler usually bites you at some point.
-Andi