summaryrefslogtreecommitdiff
path: root/libavcodec/mips
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2016-01-18 16:53:56 +0100
committerLuca Barbato <lu_zero@gentoo.org>2016-01-19 20:47:49 +0100
commitc4de754d4dac5ddae4d5a6f02798c0f560771921 (patch)
tree94f0bce44ff0b5e8c139be14c3d1794536672fd6 /libavcodec/mips
parent8fd361f53b3c17c1ae13a39e030c8fa3ab4d8f1f (diff)
mathops: mips: Correctly enable loongson-specific assembly
The code wrongly assumed that the instructions used are supported on mips64, while it is supported only on loongson cpus.
Diffstat (limited to 'libavcodec/mips')
-rw-r--r--libavcodec/mips/mathops.h37
1 files changed, 20 insertions, 17 deletions
diff --git a/libavcodec/mips/mathops.h b/libavcodec/mips/mathops.h
index dd80f68072..573d325bf1 100644
--- a/libavcodec/mips/mathops.h
+++ b/libavcodec/mips/mathops.h
@@ -28,13 +28,16 @@
#if HAVE_INLINE_ASM
#if HAVE_LOONGSON
+#if ARCH_MIPS64
static inline av_const int64_t MAC64(int64_t d, int a, int b)
{
int64_t m;
- __asm__ ("dmult.g %1, %2, %3 \n\t"
- "daddu %0, %0, %1 \n\t"
- : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
+ __asm__ ("dmult %2, %3 \n\t"
+ "mflo %1 \n\t"
+ "daddu %0, %0, %1 \n\t"
+ : "+r"(d), "=&r"(m) : "r"(a), "r"(b)
+ : "hi", "lo");
return d;
}
#define MAC64(d, a, b) ((d) = MAC64(d, a, b))
@@ -42,23 +45,23 @@ static inline av_const int64_t MAC64(int64_t d, int a, int b)
static inline av_const int64_t MLS64(int64_t d, int a, int b)
{
int64_t m;
- __asm__ ("dmult.g %1, %2, %3 \n\t"
- "dsubu %0, %0, %1 \n\t"
- : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
+ __asm__ ("dmult %2, %3 \n\t"
+ "mflo %1 \n\t"
+ "dsubu %0, %0, %1 \n\t"
+ : "+r"(d), "=&r"(m) : "r"(a), "r"(b)
+ : "hi", "lo");
return d;
}
#define MLS64(d, a, b) ((d) = MLS64(d, a, b))
-#elif ARCH_MIPS64
+#else
static inline av_const int64_t MAC64(int64_t d, int a, int b)
{
int64_t m;
- __asm__ ("dmult %2, %3 \n\t"
- "mflo %1 \n\t"
- "daddu %0, %0, %1 \n\t"
- : "+r"(d), "=&r"(m) : "r"(a), "r"(b)
- : "hi", "lo");
+ __asm__ ("dmult.g %1, %2, %3 \n\t"
+ "daddu %0, %0, %1 \n\t"
+ : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
return d;
}
#define MAC64(d, a, b) ((d) = MAC64(d, a, b))
@@ -66,17 +69,17 @@ static inline av_const int64_t MAC64(int64_t d, int a, int b)
static inline av_const int64_t MLS64(int64_t d, int a, int b)
{
int64_t m;
- __asm__ ("dmult %2, %3 \n\t"
- "mflo %1 \n\t"
- "dsubu %0, %0, %1 \n\t"
- : "+r"(d), "=&r"(m) : "r"(a), "r"(b)
- : "hi", "lo");
+ __asm__ ("dmult.g %1, %2, %3 \n\t"
+ "dsubu %0, %0, %1 \n\t"
+ : "+r"(d), "=&r"(m) : "r"(a), "r"(b));
return d;
}
#define MLS64(d, a, b) ((d) = MLS64(d, a, b))
#endif
+#endif /* HAVE_LOONGSON */
+
#endif /* HAVE_INLINE_ASM */
#endif /* AVCODEC_MIPS_MATHOPS_H */