forked from ValveSoftware/source-sdk-2013
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:
@@ -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"
|
||||||
|
Reference in New Issue
Block a user