|
|
|
@@ -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 */ |