Specify clobbered registers in POSIX SSE functions

We weren't specifying clobbered registers for our SSE implementations of
VectorNormalize and InvRSquared. Supposedly GCC and clang does not inspect the
assembly to figure out which registers are getting clobbered, so this could
potentially fix some bugs.

This fixes GH-195.
This commit is contained in:
Jørgen P. Tjernø 2013-12-03 10:34:47 -08:00
parent 27d9df18d1
commit 30064a1977

View file

@ -259,6 +259,7 @@ float FASTCALL _SSE_VectorNormalize (Vector& vec)
"movaps %%xmm4, %1 \n\t" "movaps %%xmm4, %1 \n\t"
: "=m" (radius), "=m" (result) : "=m" (radius), "=m" (result)
: "m" (*v) : "m" (*v)
: "xmm1", "xmm2", "xmm3", "xmm4"
); );
#else #else
#error "Not Implemented" #error "Not Implemented"
@ -322,8 +323,9 @@ float _SSE_InvRSquared(const float* v)
"maxss %%xmm5, %%xmm1 \n\t" "maxss %%xmm5, %%xmm1 \n\t"
"rcpss %%xmm1, %%xmm0 \n\t" "rcpss %%xmm1, %%xmm0 \n\t"
"movss %%xmm0, %0 \n\t" "movss %%xmm0, %0 \n\t"
: "=m" (inv_r2) : "+m" (inv_r2)
: "m" (*v), "0" (inv_r2) : "m" (*v)
: "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
); );
#else #else
#error "Not Implemented" #error "Not Implemented"