Add vceilf(x)
This commit is contained in:
parent
e9481df9bd
commit
d43ccc5e81
@ -1427,5 +1427,21 @@ static INLINE void vconvertrgbrgbrgbrgb2rrrrggggbbbb (const float * src, vfloat
|
|||||||
bv = _mm_setr_ps(src[2],src[5],src[8],src[11]);
|
bv = _mm_setr_ps(src[2],src[5],src[8],src[11]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined( __SSE4_1__ ) && defined( __x86_64__ )
|
||||||
|
static INLINE vfloat vceilf(vfloat x) {
|
||||||
|
return _mm_round_ps(x, _MM_FROUND_TO_POS_INF |_MM_FROUND_NO_EXC);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static INLINE vfloat vceilf(vfloat x) {
|
||||||
|
__m128i zerov = _mm_setzero_si128();
|
||||||
|
zerov = _mm_cmpeq_epi32(zerov, zerov);
|
||||||
|
const vfloat onev = (vfloat)_mm_slli_epi32(_mm_srli_epi32(zerov, 25), 23); //create vector 1.0f
|
||||||
|
const vfloat xi = _mm_cvtepi32_ps(_mm_cvttps_epi32(x));
|
||||||
|
return xi + _mm_and_ps(_mm_cmplt_ps(xi, x), onev);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // __SSE2__
|
#endif // __SSE2__
|
||||||
#endif // SLEEFSSEAVX
|
#endif // SLEEFSSEAVX
|
||||||
|
Loading…
x
Reference in New Issue
Block a user