00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef AVCODEC_MIPS_MATHOPS_H
00022 #define AVCODEC_MIPS_MATHOPS_H
00023
00024 #include <stdint.h>
00025 #include "config.h"
00026 #include "libavutil/common.h"
00027
00028 #if HAVE_LOONGSON
00029
00030 static inline av_const int64_t MAC64(int64_t d, int a, int b)
00031 {
00032 int64_t m;
00033 __asm__ ("dmult.g %1, %2, %3 \n\t"
00034 "daddu %0, %0, %1 \n\t"
00035 : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
00036 return d;
00037 }
00038 #define MAC64(d, a, b) ((d) = MAC64(d, a, b))
00039
00040 static inline av_const int64_t MLS64(int64_t d, int a, int b)
00041 {
00042 int64_t m;
00043 __asm__ ("dmult.g %1, %2, %3 \n\t"
00044 "dsubu %0, %0, %1 \n\t"
00045 : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
00046 return d;
00047 }
00048 #define MLS64(d, a, b) ((d) = MLS64(d, a, b))
00049
00050 #elif ARCH_MIPS64
00051
00052 static inline av_const int64_t MAC64(int64_t d, int a, int b)
00053 {
00054 int64_t m;
00055 __asm__ ("dmult %2, %3 \n\t"
00056 "mflo %1 \n\t"
00057 "daddu %0, %0, %1 \n\t"
00058 : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
00059 return d;
00060 }
00061 #define MAC64(d, a, b) ((d) = MAC64(d, a, b))
00062
00063 static inline av_const int64_t MLS64(int64_t d, int a, int b)
00064 {
00065 int64_t m;
00066 __asm__ ("dmult %2, %3 \n\t"
00067 "mflo %1 \n\t"
00068 "dsubu %0, %0, %1 \n\t"
00069 : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
00070 return d;
00071 }
00072 #define MLS64(d, a, b) ((d) = MLS64(d, a, b))
00073
00074 #endif
00075
00076 #endif