|
|
|
@ -27,15 +27,7 @@ |
|
|
|
|
#include "dsputil_mmx.h" |
|
|
|
|
#include "mmx.h" |
|
|
|
|
|
|
|
|
|
/* (12 * 4) 2-byte memory locations ( = 96 bytes total)
|
|
|
|
|
* idct_constants[0..15] = Mask table (M(I)) |
|
|
|
|
* idct_constants[16..43] = Cosine table (C(I)) |
|
|
|
|
* idct_constants[44..47] = 8 |
|
|
|
|
*/ |
|
|
|
|
static uint16_t idct_constants[(4 + 7) * 4]; |
|
|
|
|
static const uint16_t idct_cosine_table[7] = { |
|
|
|
|
64277, 60547, 54491, 46341, 36410, 25080, 12785 |
|
|
|
|
}; |
|
|
|
|
extern const uint16_t ff_vp3_idct_data[]; |
|
|
|
|
|
|
|
|
|
#define r0 mm0 |
|
|
|
|
#define r1 mm1 |
|
|
|
@ -258,18 +250,6 @@ static const uint16_t idct_cosine_table[7] = { |
|
|
|
|
movq_r2m(r2, *I(2)); \
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ff_vp3_dsp_init_mmx(void) |
|
|
|
|
{ |
|
|
|
|
int j = 16; |
|
|
|
|
uint16_t *p; |
|
|
|
|
|
|
|
|
|
j = 1; |
|
|
|
|
do { |
|
|
|
|
p = idct_constants + ((j + 3) << 2); |
|
|
|
|
p[0] = p[1] = p[2] = p[3] = idct_cosine_table[j - 1]; |
|
|
|
|
} while (++j <= 7); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ff_vp3_idct_mmx(int16_t *output_data) |
|
|
|
|
{ |
|
|
|
|
/* eax = quantized input
|
|
|
|
@ -281,7 +261,7 @@ void ff_vp3_idct_mmx(int16_t *output_data) |
|
|
|
|
* r0..r7 = mm0..mm7 |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#define C(x) (idct_constants + 16 + (x - 1) * 4) |
|
|
|
|
#define C(x) (ff_vp3_idct_data + (x - 1) * 8) |
|
|
|
|
#define Eight (&ff_pw_8) |
|
|
|
|
|
|
|
|
|
/* at this point, function has completed dequantization + dezigzag +
|
|
|
|
|