00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef AVUTIL_ARM_INTMATH_H
00022 #define AVUTIL_ARM_INTMATH_H
00023
00024 #include "config.h"
00025 #include "libavutil/attributes.h"
00026
00027 #if HAVE_INLINE_ASM
00028
00029 #if HAVE_ARMV6
00030 static inline av_const int FASTDIV(int a, int b)
00031 {
00032 int r, t;
00033 __asm__ volatile("cmp %3, #2 \n\t"
00034 "ldr %1, [%4, %3, lsl #2] \n\t"
00035 "lsrle %0, %2, #1 \n\t"
00036 "smmulgt %0, %1, %2 \n\t"
00037 : "=&r"(r), "=&r"(t) : "r"(a), "r"(b), "r"(ff_inverse));
00038 return r;
00039 }
00040 #else
00041 static inline av_const int FASTDIV(int a, int b)
00042 {
00043 int r, t;
00044 __asm__ volatile("umull %1, %0, %2, %3"
00045 : "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b]));
00046 return r;
00047 }
00048 #endif
00049
00050 #define FASTDIV FASTDIV
00051
00052 #endif
00053
00054 #endif