# HG changeset patch # User glantau # Date 997224165 0 # Node ID 7cf705a32d1ca7f74ff36b3529dfa267ba7fde54 # Parent a524484f9adf9cb305cbbdd225a81382ef3c2bad updated dct-test to test IDCTs too diff -r a524484f9adf -r 7cf705a32d1c dct-test.c --- a/dct-test.c Tue Aug 07 22:42:22 2001 +0000 +++ b/dct-test.c Tue Aug 07 22:42:45 2001 +0000 @@ -6,12 +6,21 @@ #include #include #include +#include #include "dsputil.h" +#include "i386/mmx.h" + +/* reference fdct/idct */ extern void fdct(DCTELEM *block); +extern void idct(DCTELEM *block); extern void init_fdct(); +extern void j_rev_dct(DCTELEM *data); +extern void ff_mmx_idct(DCTELEM *data); +extern void ff_mmxext_idct(DCTELEM *data); + #define AANSCALE_BITS 12 static const unsigned short aanscales[64] = { /* precomputed values scaled up by 14 bits */ @@ -35,11 +44,26 @@ #define NB_ITS 20000 #define NB_ITS_SPEED 50000 -void dct_error(const char *name, - void (*fdct_func)(DCTELEM *block)) +static short idct_mmx_perm[64]; + +void idct_mmx_init(void) +{ + int i; + + /* the mmx/mmxext idct uses a reordered input, so we patch scan tables */ + for (i = 0; i < 64; i++) { + idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2); + } +} + +static DCTELEM block[64] __attribute__ ((aligned (8))); +static DCTELEM block1[64] __attribute__ ((aligned (8))); + +void dct_error(const char *name, int is_idct, + void (*fdct_func)(DCTELEM *block), + void (*fdct_ref)(DCTELEM *block)) { int it, i, scale; - DCTELEM block[64], block1[64]; int err_inf, v; INT64 err2, ti, ti1, it1; @@ -50,9 +74,22 @@ for(it=0;it