I just browsed the code a bit and found something strange in the implementation of csignf...
if this should basically do 'sign(b) * fabs(a)' then the line
ma = _mm_andnot_ps(ma, mm);
should probably read
ma = _mm_andnot_ps(mm, ma),
as _mm_andnot_ps(m128 a , m128 b ) is doing "~a & b" and not "a & ~b".
In this current implementation it looks to me as if the function will always return either +0 or -0.
I just browsed the code a bit and found something strange in the implementation of csignf... if this should basically do 'sign(b) * fabs(a)' then the line
ma = _mm_andnot_ps(ma, mm);
should probably readma = _mm_andnot_ps(mm, ma)
, as _mm_andnot_ps(m128 a , m128 b ) is doing "~a & b" and not "a & ~b". In this current implementation it looks to me as if the function will always return either +0 or -0.