[FFmpeg-devel] [PATCH 4/5] ARM: SDIVMOD for gcc that does the right thing

Mans Rullgard mans
Mon Apr 12 00:05:53 CEST 2010


---
 libavcodec/arm/mathops.h |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/libavcodec/arm/mathops.h b/libavcodec/arm/mathops.h
index 2244fa1..7b7a54e 100644
--- a/libavcodec/arm/mathops.h
+++ b/libavcodec/arm/mathops.h
@@ -93,6 +93,16 @@ static inline av_const int MUL16(int ra, int rb)
 
 #endif
 
+#define SDIVMOD(q, r, n, d) do {                        \
+        register int r0 __asm__ ("r0") = (n);           \
+        register int r1 __asm__ ("r1") = (d);           \
+        __asm__ volatile ("bl __aeabi_idivmod \n\t"     \
+                          : "+&r"(r0), "+&r"(r1)        \
+                          :: "r2", "r3", "r12", "lr");  \
+        (q) = r0;                                       \
+        (r) = r1;                                       \
+    } while (0)
+
 #define mid_pred mid_pred
 static inline av_const int mid_pred(int a, int b, int c)
 {
-- 
1.7.0.4




More information about the ffmpeg-devel mailing list