00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AVCODEC_ARM_MATHOPS_H
00023 #define AVCODEC_ARM_MATHOPS_H
00024
00025 #include <stdint.h>
00026 #include "config.h"
00027 #include "libavutil/common.h"
00028
00029 #if HAVE_INLINE_ASM
00030
00031 #if HAVE_ARMV6
00032 #define MULH MULH
00033 static inline av_const int MULH(int a, int b)
00034 {
00035 int r;
00036 __asm__ ("smmul %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
00037 return r;
00038 }
00039 #endif
00040
00041 #define MLS64(d, a, b) MAC64(d, -(a), b)
00042
00043 #if HAVE_ARMV5TE
00044
00045
00046 # define MAC16(rt, ra, rb) \
00047 __asm__ ("smlabb %0, %1, %2, %0" : "+r"(rt) : "r"(ra), "r"(rb));
00048
00049
00050 # define MUL16 MUL16
00051 static inline av_const int MUL16(int ra, int rb)
00052 {
00053 int rt;
00054 __asm__ ("smulbb %0, %1, %2" : "=r"(rt) : "r"(ra), "r"(rb));
00055 return rt;
00056 }
00057
00058 #endif
00059
00060 #define mid_pred mid_pred
00061 static inline av_const int mid_pred(int a, int b, int c)
00062 {
00063 int m;
00064 __asm__ (
00065 "mov %0, %2 \n\t"
00066 "cmp %1, %2 \n\t"
00067 "itt gt \n\t"
00068 "movgt %0, %1 \n\t"
00069 "movgt %1, %2 \n\t"
00070 "cmp %1, %3 \n\t"
00071 "it le \n\t"
00072 "movle %1, %3 \n\t"
00073 "cmp %0, %1 \n\t"
00074 "it gt \n\t"
00075 "movgt %0, %1 \n\t"
00076 : "=&r"(m), "+r"(a)
00077 : "r"(b), "r"(c)
00078 : "cc");
00079 return m;
00080 }
00081
00082 #endif
00083
00084 #endif