avutil/avassert: Add av_assertX_fpu()
authorMichael Niedermayer <michael@niedermayer.cc>
Fri, 21 Oct 2016 10:50:03 +0000 (12:50 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 22 Oct 2016 11:50:09 +0000 (13:50 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
doc/APIchanges
libavutil/avassert.h
libavutil/utils.c
libavutil/version.h

index 130638b..502ab3f 100644 (file)
@@ -15,6 +15,9 @@ libavutil:     2015-08-28
 
 API changes, most recent first:
 
+2016-10-22 - xxxxxxx - lavu 55.33.100 - avassert.h
+  Add av_assert0_fpu() / av_assert2_fpu()
+
 2016-xx-xx - xxxxxxx - lavc 57.61.100 / lavc 57.24.0 - avcodec.h
   Decoders now export the frame timestamp as AVFrame.pts. It was
   previously exported as AVFrame.pkt_pts, which is now deprecated.
index f473637..46f3fea 100644 (file)
  */
 #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 */
index f409f32..36e4dd5 100644 (file)
@@ -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
+}
index 8a41ef6..5ee6e6d 100644 (file)
@@ -79,7 +79,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  55
-#define LIBAVUTIL_VERSION_MINOR  32
+#define LIBAVUTIL_VERSION_MINOR  33
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \