diff mbox

[FFmpeg-devel,6/7] avutil/avassert: Add av_assertX_fpu()

Message ID 20161021133146.11956-6-michael@niedermayer.cc
State Accepted
Headers show

Commit Message

Michael Niedermayer Oct. 21, 2016, 1:31 p.m. UTC
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavutil/avassert.h |  9 +++++++++
 libavutil/utils.c    | 13 +++++++++++++
 2 files changed, 22 insertions(+)

Comments

Michael Niedermayer Oct. 22, 2016, 12:20 p.m. UTC | #1
On Fri, Oct 21, 2016 at 03:31:45PM +0200, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavutil/avassert.h |  9 +++++++++
>  libavutil/utils.c    | 13 +++++++++++++
>  2 files changed, 22 insertions(+)

applied with version bump

[...]
diff mbox

Patch

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
+}