Add shift argument to MULL() macro
This replaces use of FRAC_BITS in the MULL() definition with a third argument specifying the shift amount. All uses of this macro are updated to pass FRAC_BITS as third argument. Originally committed as revision 15921 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8f5aaa6d2f
commit
4deaa94639
@ -25,19 +25,17 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "libavutil/common.h"
|
#include "libavutil/common.h"
|
||||||
|
|
||||||
#ifdef FRAC_BITS
|
|
||||||
# define MULL MULL
|
# define MULL MULL
|
||||||
static inline av_const int MULL(int a, int b)
|
static inline av_const int MULL(int a, int b, unsigned shift)
|
||||||
{
|
{
|
||||||
int lo, hi;
|
int lo, hi;
|
||||||
__asm__("smull %0, %1, %2, %3 \n\t"
|
__asm__("smull %0, %1, %2, %3 \n\t"
|
||||||
"mov %0, %0, lsr %4 \n\t"
|
"mov %0, %0, lsr %4 \n\t"
|
||||||
"add %1, %0, %1, lsl %5 \n\t"
|
"add %1, %0, %1, lsl %5 \n\t"
|
||||||
: "=&r"(lo), "=&r"(hi)
|
: "=&r"(lo), "=&r"(hi)
|
||||||
: "r"(b), "r"(a), "i"(FRAC_BITS), "i"(32-FRAC_BITS));
|
: "r"(b), "r"(a), "i"(shift), "i"(32-shift));
|
||||||
return hi;
|
return hi;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MULH MULH
|
#define MULH MULH
|
||||||
#ifdef HAVE_ARMV6
|
#ifdef HAVE_ARMV6
|
||||||
|
@ -22,15 +22,13 @@
|
|||||||
#ifndef AVCODEC_I386_MATHOPS_H
|
#ifndef AVCODEC_I386_MATHOPS_H
|
||||||
#define AVCODEC_I386_MATHOPS_H
|
#define AVCODEC_I386_MATHOPS_H
|
||||||
|
|
||||||
#ifdef FRAC_BITS
|
#define MULL(ra, rb, shift) \
|
||||||
# define MULL(ra, rb) \
|
|
||||||
({ int rt, dummy; __asm__ (\
|
({ int rt, dummy; __asm__ (\
|
||||||
"imull %3 \n\t"\
|
"imull %3 \n\t"\
|
||||||
"shrdl %4, %%edx, %%eax \n\t"\
|
"shrdl %4, %%edx, %%eax \n\t"\
|
||||||
: "=a"(rt), "=d"(dummy)\
|
: "=a"(rt), "=d"(dummy)\
|
||||||
: "a" ((int)ra), "rm" ((int)rb), "i"(FRAC_BITS));\
|
: "a" ((int)ra), "rm" ((int)rb), "i"(shift));\
|
||||||
rt; })
|
rt; })
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MULH(ra, rb) \
|
#define MULH(ra, rb) \
|
||||||
({ int rt, dummy;\
|
({ int rt, dummy;\
|
||||||
|
@ -72,7 +72,7 @@ static void lsp2poly(int* f, const int16_t* lsp, int lp_half_order)
|
|||||||
{
|
{
|
||||||
f[i] = f[i-2];
|
f[i] = f[i-2];
|
||||||
for(j=i; j>1; j--)
|
for(j=i; j>1; j--)
|
||||||
f[j] -= MULL(f[j-1], lsp[2*i-2]) - f[j-2];
|
f[j] -= MULL(f[j-1], lsp[2*i-2], FRAC_BITS) - f[j-2];
|
||||||
|
|
||||||
f[1] -= lsp[2*i-2] << 8;
|
f[1] -= lsp[2*i-2] << 8;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
/* generic implementation */
|
/* generic implementation */
|
||||||
|
|
||||||
#ifndef MULL
|
#ifndef MULL
|
||||||
# define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
|
# define MULL(a,b,s) (((int64_t)(a) * (int64_t)(b)) >> (s))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef MULH
|
#ifndef MULH
|
||||||
|
@ -351,9 +351,9 @@ static int decode_init(AVCodecContext * avctx)
|
|||||||
int n, norm;
|
int n, norm;
|
||||||
n = i + 2;
|
n = i + 2;
|
||||||
norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
|
norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
|
||||||
scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm);
|
scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm, FRAC_BITS);
|
||||||
scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm);
|
scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm, FRAC_BITS);
|
||||||
scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm);
|
scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm, FRAC_BITS);
|
||||||
dprintf(avctx, "%d: norm=%x s=%x %x %x\n",
|
dprintf(avctx, "%d: norm=%x s=%x %x %x\n",
|
||||||
i, norm,
|
i, norm,
|
||||||
scale_factor_mult[i][0],
|
scale_factor_mult[i][0],
|
||||||
@ -1097,7 +1097,7 @@ static void imdct36(int *out, int *buf, int *in, int *win)
|
|||||||
t2 = tmp[i + 1];
|
t2 = tmp[i + 1];
|
||||||
t3 = tmp[i + 3];
|
t3 = tmp[i + 3];
|
||||||
s1 = MULH(2*(t3 + t2), icos36h[j]);
|
s1 = MULH(2*(t3 + t2), icos36h[j]);
|
||||||
s3 = MULL(t3 - t2, icos36[8 - j]);
|
s3 = MULL(t3 - t2, icos36[8 - j], FRAC_BITS);
|
||||||
|
|
||||||
t0 = s0 + s1;
|
t0 = s0 + s1;
|
||||||
t1 = s0 - s1;
|
t1 = s0 - s1;
|
||||||
@ -1705,8 +1705,8 @@ static void compute_stereo(MPADecodeContext *s,
|
|||||||
v2 = is_tab[1][sf];
|
v2 = is_tab[1][sf];
|
||||||
for(j=0;j<len;j++) {
|
for(j=0;j<len;j++) {
|
||||||
tmp0 = tab0[j];
|
tmp0 = tab0[j];
|
||||||
tab0[j] = MULL(tmp0, v1);
|
tab0[j] = MULL(tmp0, v1, FRAC_BITS);
|
||||||
tab1[j] = MULL(tmp0, v2);
|
tab1[j] = MULL(tmp0, v2, FRAC_BITS);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
found1:
|
found1:
|
||||||
@ -1716,8 +1716,8 @@ static void compute_stereo(MPADecodeContext *s,
|
|||||||
for(j=0;j<len;j++) {
|
for(j=0;j<len;j++) {
|
||||||
tmp0 = tab0[j];
|
tmp0 = tab0[j];
|
||||||
tmp1 = tab1[j];
|
tmp1 = tab1[j];
|
||||||
tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
|
tab0[j] = MULL(tmp0 + tmp1, ISQRT2, FRAC_BITS);
|
||||||
tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
|
tab1[j] = MULL(tmp0 - tmp1, ISQRT2, FRAC_BITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1749,8 +1749,8 @@ static void compute_stereo(MPADecodeContext *s,
|
|||||||
v2 = is_tab[1][sf];
|
v2 = is_tab[1][sf];
|
||||||
for(j=0;j<len;j++) {
|
for(j=0;j<len;j++) {
|
||||||
tmp0 = tab0[j];
|
tmp0 = tab0[j];
|
||||||
tab0[j] = MULL(tmp0, v1);
|
tab0[j] = MULL(tmp0, v1, FRAC_BITS);
|
||||||
tab1[j] = MULL(tmp0, v2);
|
tab1[j] = MULL(tmp0, v2, FRAC_BITS);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
found2:
|
found2:
|
||||||
@ -1760,8 +1760,8 @@ static void compute_stereo(MPADecodeContext *s,
|
|||||||
for(j=0;j<len;j++) {
|
for(j=0;j<len;j++) {
|
||||||
tmp0 = tab0[j];
|
tmp0 = tab0[j];
|
||||||
tmp1 = tab1[j];
|
tmp1 = tab1[j];
|
||||||
tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
|
tab0[j] = MULL(tmp0 + tmp1, ISQRT2, FRAC_BITS);
|
||||||
tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
|
tab1[j] = MULL(tmp0 - tmp1, ISQRT2, FRAC_BITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user