@ -22,6 +22,7 @@
# define AVUTIL_X86_INTMATH_H
# include <stdint.h>
# include <stdlib.h>
# if HAVE_FAST_CLZ
# if defined(_MSC_VER)
# include <intrin.h>
@ -98,6 +99,38 @@ static av_always_inline av_const unsigned av_mod_uintp2_bmi2(unsigned a, unsigne
# endif /* __BMI2__ */
# if defined(__SSE2__)
# define av_clipd av_clipd_sse2
static av_always_inline av_const double av_clipd_sse2 ( double a , double amin , double amax )
{
# if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
if ( amin > amax ) abort ( ) ;
# endif
__asm__ ( " minsd %2, %0 \n \t "
" maxsd %1, %0 \n \t "
: " +x " ( a ) : " xm " ( amin ) , " xm " ( amax ) ) ;
return a ;
}
# endif /* __SSE2__ */
# if defined(__SSE__)
# define av_clipf av_clipf_sse
static av_always_inline av_const float av_clipf_sse ( float a , float amin , float amax )
{
# if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
if ( amin > amax ) abort ( ) ;
# endif
__asm__ ( " minss %2, %0 \n \t "
" maxss %1, %0 \n \t "
: " +x " ( a ) : " xm " ( amin ) , " xm " ( amax ) ) ;
return a ;
}
# endif /* __SSE__ */
# endif /* __GNUC__ */
# endif /* AVUTIL_X86_INTMATH_H */