summaryrefslogtreecommitdiff
path: root/libavcodec/arm/mathops.h
diff options
context:
space:
mode:
authorDiego Biurrun <diego@biurrun.de>2012-10-11 01:16:05 +0200
committerDiego Biurrun <diego@biurrun.de>2012-10-11 18:29:36 +0200
commit9734b8ba56d05e970c353dfd5baafa43fdb08024 (patch)
treee1f40e82ce4aa2ab7dc081115278057e08ffbbb6 /libavcodec/arm/mathops.h
parent0a75d1da23b8659ec49391469bb592da12760077 (diff)
Move avutil tables only used in libavcodec to libavcodec.
Diffstat (limited to 'libavcodec/arm/mathops.h')
-rw-r--r--libavcodec/arm/mathops.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/libavcodec/arm/mathops.h b/libavcodec/arm/mathops.h
index 3803fcde8c..17a687da6a 100644
--- a/libavcodec/arm/mathops.h
+++ b/libavcodec/arm/mathops.h
@@ -36,6 +36,30 @@ static inline av_const int MULH(int a, int b)
__asm__ ("smmul %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
return r;
}
+
+#define FASTDIV FASTDIV
+static av_always_inline av_const int FASTDIV(int a, int b)
+{
+ int r;
+ __asm__ ("cmp %2, #2 \n\t"
+ "ldr %0, [%3, %2, lsl #2] \n\t"
+ "ite le \n\t"
+ "lsrle %0, %1, #1 \n\t"
+ "smmulgt %0, %0, %1 \n\t"
+ : "=&r"(r) : "r"(a), "r"(b), "r"(ff_inverse) : "cc");
+ return r;
+}
+
+#else /* HAVE_ARMV6 */
+
+#define FASTDIV FASTDIV
+static av_always_inline av_const int FASTDIV(int a, int b)
+{
+ int r, t;
+ __asm__ ("umull %1, %0, %2, %3"
+ : "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b]));
+ return r;
+}
#endif
#define MLS64(d, a, b) MAC64(d, -(a), b)