mirror of
https://github.com/ValveSoftware/source-sdk-2013.git
synced 2024-11-21 19:31:14 +00:00
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:
parent
27d9df18d1
commit
30064a1977
1 changed files with 4 additions and 2 deletions
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue