[FFmpeg-devel] [PATCH 6/7] avutil/avassert: Add av_assertX_fpu()
Michael Niedermayer
michael at niedermayer.cc
Fri Oct 21 16:31:45 EEST 2016
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
libavutil/avassert.h | 9 +++++++++
libavutil/utils.c | 13 +++++++++++++
2 files changed, 22 insertions(+)
diff --git a/libavutil/avassert.h b/libavutil/avassert.h
index f473637..46f3fea 100644
--- a/libavutil/avassert.h
+++ b/libavutil/avassert.h
@@ -59,8 +59,17 @@
*/
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
#define av_assert2(cond) av_assert0(cond)
+#define av_assert2_fpu() av_assert0_fpu()
#else
#define av_assert2(cond) ((void)0)
+#define av_assert2_fpu() ((void)0)
#endif
+/**
+ * Assert that floating point opperations can be executed.
+ *
+ * This will av_assert0() that the cpu is not in MMX state on X86
+ */
+void av_assert0_fpu(void);
+
#endif /* AVUTIL_AVASSERT_H */
diff --git a/libavutil/utils.c b/libavutil/utils.c
index f409f32..36e4dd5 100644
--- a/libavutil/utils.c
+++ b/libavutil/utils.c
@@ -125,3 +125,16 @@ AVRational av_get_time_base_q(void)
{
return (AVRational){1, AV_TIME_BASE};
}
+
+void av_assert0_fpu(void) {
+#if HAVE_MMX_INLINE
+ uint16_t state[14];
+ __asm volatile (
+ "fstenv %0 \n\t"
+ : "+m" (state)
+ :
+ : "memory"
+ );
+ av_assert0((state[4] & 3) == 3);
+#endif
+}
--
2.10.1
More information about the ffmpeg-devel
mailing list