#include <unistd.h>
#include <math.h>
-#include "dsputil.h"
+#include "libavutil/common.h"
#include "simple_idct.h"
#include "faandct.h"
#include "faanidct.h"
#include "i386/idct_xvid.h"
-#ifndef MAX
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-#endif
-
#undef printf
#undef random
struct algo {
- char *name;
+ const char *name;
enum { FDCT, IDCT } is_idct;
void (* func) (DCTELEM *block);
void (* ref) (DCTELEM *block);
#define FAAN_SCALE NO_PERM
#endif
+static int cpu_flags;
+
struct algo algos[] = {
{"REF-DBL", 0, fdct, fdct, NO_PERM},
{"FAAN", 0, ff_faandct, fdct, FAAN_SCALE},
static DCTELEM block1[64] __attribute__ ((aligned (8)));
static DCTELEM block_org[64] __attribute__ ((aligned (8)));
+static inline void mmx_emms(void)
+{
+#ifdef HAVE_MMX
+ if (cpu_flags & MM_MMX)
+ asm volatile ("emms\n\t");
+#endif
+}
+
void dct_error(const char *name, int is_idct,
void (*fdct_func)(DCTELEM *block),
void (*fdct_ref)(DCTELEM *block), int form, int test)
#endif
fdct_func(block);
- emms_c(); /* for ff_mmx_idct */
+ mmx_emms();
if (form == SCALE_PERM) {
for(i=0; i<64; i++) {
}
#endif
}
- for(i=0; i<64; i++) sysErrMax= MAX(sysErrMax, FFABS(sysErr[i]));
+ for(i=0; i<64; i++) sysErrMax= FFMAX(sysErrMax, FFABS(sysErr[i]));
#if 1 // dump systematic errors
for(i=0; i<64; i++){
it1 += NB_ITS_SPEED;
ti1 = gettime() - ti;
} while (ti1 < 1000000);
- emms_c();
+ mmx_emms();
printf("%s %s: %0.1f kdct/s\n",
is_idct ? "IDCT" : "DCT",
it1 += NB_ITS_SPEED;
ti1 = gettime() - ti;
} while (ti1 < 1000000);
- emms_c();
+ mmx_emms();
printf("%s %s: %0.1f kdct/s\n",
1 ? "IDCT248" : "DCT248",
int test_idct = 0, test_248_dct = 0;
int c,i;
int test=1;
+ cpu_flags = mm_support();
init_fdct();
idct_mmx_init();
- mm_flags = mm_support();
for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
for(i=0;i<MAX_NEG_CROP;i++) {
idct248_error("SIMPLE-C", ff_simple_idct248_put);
} else {
for (i=0;algos[i].name;i++)
- if (algos[i].is_idct == test_idct && !(~mm_flags & algos[i].mm_support)) {
+ if (algos[i].is_idct == test_idct && !(~cpu_flags & algos[i].mm_support)) {
dct_error (algos[i].name, algos[i].is_idct, algos[i].func, algos[i].ref, algos[i].format, test);
}
}