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.
This commit is contained in:
Luca Barbato 2016-01-18 16:53:56 +01:00
parent 8fd361f53b
commit c4de754d4d
1 changed files with 25 additions and 22 deletions

View File

@ -28,28 +28,7 @@
#if HAVE_INLINE_ASM
#if HAVE_LOONGSON
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));
return d;
}
#define MAC64(d, a, b) ((d) = MAC64(d, a, 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));
return d;
}
#define MLS64(d, a, b) ((d) = MLS64(d, a, b))
#elif ARCH_MIPS64
#if ARCH_MIPS64
static inline av_const int64_t MAC64(int64_t d, int a, int b)
{
@ -75,8 +54,32 @@ static inline av_const int64_t MLS64(int64_t d, int a, int b)
}
#define MLS64(d, a, b) ((d) = MLS64(d, a, b))
#else
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));
return d;
}
#define MAC64(d, a, b) ((d) = MAC64(d, a, 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));
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 */