[cvs] / xvidcore / examples / xvid_bench.c Repository:
ViewVC logotype

Diff of /xvidcore/examples/xvid_bench.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9.2.8, Wed Nov 19 21:27:25 2003 UTC revision 1.14, Mon Apr 12 15:49:56 2004 UTC
# Line 26  Line 26 
26  /*****************************************************************************  /*****************************************************************************
27   *   *
28   *  'Reference' output is at the end of file.   *  'Reference' output is at the end of file.
  *  Don't take the checksums and crc too seriouly, they aren't  
  *  bullet-proof (should plug some .md5 here)...  
29   *   *
30   *   compiles with something like:   *   compiles with something like:
31   *   gcc -o xvid_bench xvid_bench.c  -I../src/ -lxvidcore -lm   *   gcc -o xvid_bench xvid_bench.c  -I../src/ -lxvidcore -lm
# Line 119  Line 117 
117    , { "MMXEXT", XVID_CPU_MMXEXT | XVID_CPU_MMX }    , { "MMXEXT", XVID_CPU_MMXEXT | XVID_CPU_MMX }
118    , { "SSE2  ", XVID_CPU_SSE2 | XVID_CPU_MMX }    , { "SSE2  ", XVID_CPU_SSE2 | XVID_CPU_MMX }
119    , { "3DNOW ", XVID_CPU_3DNOW }    , { "3DNOW ", XVID_CPU_3DNOW }
120    , { "3DNOWE", XVID_CPU_3DNOWEXT }    , { "3DNOWE", XVID_CPU_3DNOW | XVID_CPU_3DNOWEXT }
121    #endif
122    #ifdef ARCH_IS_PPC
123      , { "ALTIVEC", XVID_CPU_ALTIVEC }
124  #endif  #endif
125  //, { "IA64  ", XVID_CPU_IA64 }  //, { "IA64  ", XVID_CPU_IA64 }
126  //, { "TSC   ", XVID_CPU_TSC }  //, { "TSC   ", XVID_CPU_TSC }
# Line 171  Line 172 
172          return 1;          return 1;
173  }  }
174    
175    #define CRC32_REMAINDER 0xCBF43926
176    #define CRC32_INITIAL 0xffffffff
177    
178    #define DO1(c, crc) ((crc) = crc32tab[((unsigned int)((crc)>>24) ^ (*c++)) & 0xff] ^ ((crc) << 8))
179    #define DO2(c, crc)  DO1(c, crc); DO1(c, crc);
180    #define DO4(c, crc)  DO2(c, crc); DO2(c, crc);
181    #define DO8(c, crc)  DO4(c, crc); DO4(c, crc);
182    
183    /******************************************************************************
184    * Precomputed AAL5 CRC32 lookup table
185    ******************************************************************************/
186    
187    static unsigned long crc32tab[256] = {
188    
189            0x00000000L, 0x04C11DB7L, 0x09823B6EL, 0x0D4326D9L,
190            0x130476DCL, 0x17C56B6BL, 0x1A864DB2L, 0x1E475005L,
191            0x2608EDB8L, 0x22C9F00FL, 0x2F8AD6D6L, 0x2B4BCB61L,
192            0x350C9B64L, 0x31CD86D3L, 0x3C8EA00AL, 0x384FBDBDL,
193            0x4C11DB70L, 0x48D0C6C7L, 0x4593E01EL, 0x4152FDA9L,
194            0x5F15ADACL, 0x5BD4B01BL, 0x569796C2L, 0x52568B75L,
195            0x6A1936C8L, 0x6ED82B7FL, 0x639B0DA6L, 0x675A1011L,
196            0x791D4014L, 0x7DDC5DA3L, 0x709F7B7AL, 0x745E66CDL,
197            0x9823B6E0L, 0x9CE2AB57L, 0x91A18D8EL, 0x95609039L,
198            0x8B27C03CL, 0x8FE6DD8BL, 0x82A5FB52L, 0x8664E6E5L,
199            0xBE2B5B58L, 0xBAEA46EFL, 0xB7A96036L, 0xB3687D81L,
200            0xAD2F2D84L, 0xA9EE3033L, 0xA4AD16EAL, 0xA06C0B5DL,
201            0xD4326D90L, 0xD0F37027L, 0xDDB056FEL, 0xD9714B49L,
202            0xC7361B4CL, 0xC3F706FBL, 0xCEB42022L, 0xCA753D95L,
203            0xF23A8028L, 0xF6FB9D9FL, 0xFBB8BB46L, 0xFF79A6F1L,
204            0xE13EF6F4L, 0xE5FFEB43L, 0xE8BCCD9AL, 0xEC7DD02DL,
205            0x34867077L, 0x30476DC0L, 0x3D044B19L, 0x39C556AEL,
206            0x278206ABL, 0x23431B1CL, 0x2E003DC5L, 0x2AC12072L,
207            0x128E9DCFL, 0x164F8078L, 0x1B0CA6A1L, 0x1FCDBB16L,
208            0x018AEB13L, 0x054BF6A4L, 0x0808D07DL, 0x0CC9CDCAL,
209            0x7897AB07L, 0x7C56B6B0L, 0x71159069L, 0x75D48DDEL,
210            0x6B93DDDBL, 0x6F52C06CL, 0x6211E6B5L, 0x66D0FB02L,
211            0x5E9F46BFL, 0x5A5E5B08L, 0x571D7DD1L, 0x53DC6066L,
212            0x4D9B3063L, 0x495A2DD4L, 0x44190B0DL, 0x40D816BAL,
213            0xACA5C697L, 0xA864DB20L, 0xA527FDF9L, 0xA1E6E04EL,
214            0xBFA1B04BL, 0xBB60ADFCL, 0xB6238B25L, 0xB2E29692L,
215            0x8AAD2B2FL, 0x8E6C3698L, 0x832F1041L, 0x87EE0DF6L,
216            0x99A95DF3L, 0x9D684044L, 0x902B669DL, 0x94EA7B2AL,
217            0xE0B41DE7L, 0xE4750050L, 0xE9362689L, 0xEDF73B3EL,
218            0xF3B06B3BL, 0xF771768CL, 0xFA325055L, 0xFEF34DE2L,
219            0xC6BCF05FL, 0xC27DEDE8L, 0xCF3ECB31L, 0xCBFFD686L,
220            0xD5B88683L, 0xD1799B34L, 0xDC3ABDEDL, 0xD8FBA05AL,
221            0x690CE0EEL, 0x6DCDFD59L, 0x608EDB80L, 0x644FC637L,
222            0x7A089632L, 0x7EC98B85L, 0x738AAD5CL, 0x774BB0EBL,
223            0x4F040D56L, 0x4BC510E1L, 0x46863638L, 0x42472B8FL,
224            0x5C007B8AL, 0x58C1663DL, 0x558240E4L, 0x51435D53L,
225            0x251D3B9EL, 0x21DC2629L, 0x2C9F00F0L, 0x285E1D47L,
226            0x36194D42L, 0x32D850F5L, 0x3F9B762CL, 0x3B5A6B9BL,
227            0x0315D626L, 0x07D4CB91L, 0x0A97ED48L, 0x0E56F0FFL,
228            0x1011A0FAL, 0x14D0BD4DL, 0x19939B94L, 0x1D528623L,
229            0xF12F560EL, 0xF5EE4BB9L, 0xF8AD6D60L, 0xFC6C70D7L,
230            0xE22B20D2L, 0xE6EA3D65L, 0xEBA91BBCL, 0xEF68060BL,
231            0xD727BBB6L, 0xD3E6A601L, 0xDEA580D8L, 0xDA649D6FL,
232            0xC423CD6AL, 0xC0E2D0DDL, 0xCDA1F604L, 0xC960EBB3L,
233            0xBD3E8D7EL, 0xB9FF90C9L, 0xB4BCB610L, 0xB07DABA7L,
234            0xAE3AFBA2L, 0xAAFBE615L, 0xA7B8C0CCL, 0xA379DD7BL,
235            0x9B3660C6L, 0x9FF77D71L, 0x92B45BA8L, 0x9675461FL,
236            0x8832161AL, 0x8CF30BADL, 0x81B02D74L, 0x857130C3L,
237            0x5D8A9099L, 0x594B8D2EL, 0x5408ABF7L, 0x50C9B640L,
238            0x4E8EE645L, 0x4A4FFBF2L, 0x470CDD2BL, 0x43CDC09CL,
239            0x7B827D21L, 0x7F436096L, 0x7200464FL, 0x76C15BF8L,
240            0x68860BFDL, 0x6C47164AL, 0x61043093L, 0x65C52D24L,
241            0x119B4BE9L, 0x155A565EL, 0x18197087L, 0x1CD86D30L,
242            0x029F3D35L, 0x065E2082L, 0x0B1D065BL, 0x0FDC1BECL,
243            0x3793A651L, 0x3352BBE6L, 0x3E119D3FL, 0x3AD08088L,
244            0x2497D08DL, 0x2056CD3AL, 0x2D15EBE3L, 0x29D4F654L,
245            0xC5A92679L, 0xC1683BCEL, 0xCC2B1D17L, 0xC8EA00A0L,
246            0xD6AD50A5L, 0xD26C4D12L, 0xDF2F6BCBL, 0xDBEE767CL,
247            0xE3A1CBC1L, 0xE760D676L, 0xEA23F0AFL, 0xEEE2ED18L,
248            0xF0A5BD1DL, 0xF464A0AAL, 0xF9278673L, 0xFDE69BC4L,
249            0x89B8FD09L, 0x8D79E0BEL, 0x803AC667L, 0x84FBDBD0L,
250            0x9ABC8BD5L, 0x9E7D9662L, 0x933EB0BBL, 0x97FFAD0CL,
251            0xAFB010B1L, 0xAB710D06L, 0xA6322BDFL, 0xA2F33668L,
252            0xBCB4666DL, 0xB8757BDAL, 0xB5365D03L, 0xB1F740B4L
253    
254    };
255    
256    uint32_t
257    calc_crc(uint8_t *mem, int len, uint32_t initial)
258    {
259    
260            register unsigned int crc;
261    
262            crc = initial;
263    
264            while( len >= 8) {
265                    DO8(mem, crc);
266                    len -= 8;
267            }
268    
269            while( len ) {
270                    DO1(mem, crc);
271                    len--;
272            }
273    
274            return(crc);
275    
276    }
277    
278  /*********************************************************************  /*********************************************************************
279   * test DCT   * test DCT
280   *********************************************************************/   *********************************************************************/
# Line 223  Line 327 
327                          MSE += delta*delta;                          MSE += delta*delta;
328                  }                  }
329                  PSNR = (MSE==0.) ? 1.e6 : -4.3429448*log( MSE/64. );                  PSNR = (MSE==0.) ? 1.e6 : -4.3429448*log( MSE/64. );
330                  printf( "%s -  %.3f usec       PSNR=%.3f  MSE=%.3f\n",                  printf( "%s -  %.3f usec       PSNR=%.3f  MSE=%.3f %s\n",
331                                  cpu->name, t, PSNR, MSE );                                  cpu->name, t, PSNR, MSE,
332                  if (ABS(MSE)>=64) printf( "*** CRC ERROR! ***\n" );                                  (ABS(MSE)>=64)? "| ERROR" :"");
333          }          }
334  }  }
335    
# Line 239  Line 343 
343          int tst;          int tst;
344          CPU *cpu;          CPU *cpu;
345          int i;          int i;
346          uint8_t Cur[16*16], Ref1[16*16], Ref2[16*16];          DECLARE_ALIGNED_MATRIX(Cur,  16, 16, uint8_t, 16);
347            DECLARE_ALIGNED_MATRIX(Ref1, 16, 16, uint8_t, 16);
348            DECLARE_ALIGNED_MATRIX(Ref2, 16, 16, uint8_t, 16);
349    
350          printf( "\n ======  test SAD ======\n" );          printf( "\n ======  test SAD ======\n" );
351          for(i=0; i<16*16;++i) {          for(i=0; i<16*16;++i) {
# Line 260  Line 366 
366                  for(tst=0; tst<nb_tests; ++tst) s = sad8(Cur, Ref1, 16);                  for(tst=0; tst<nb_tests; ++tst) s = sad8(Cur, Ref1, 16);
367                  emms();                  emms();
368                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
369                  printf( "%s - sad8    %.3f usec       sad=%d\n", cpu->name, t, s );                  printf("%s - sad8    %.3f usec       sad=%d %s\n",
370                  if (s!=3776) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
371                               (s!=3776)?"| ERROR": "" );
372    
373                  t = gettime_usec();                  t = gettime_usec();
374                  emms();                  emms();
375                  for(tst=0; tst<nb_tests; ++tst) s = sad16(Cur, Ref1, 16, -1);                  for(tst=0; tst<nb_tests; ++tst) s = sad16(Cur, Ref1, 16, -1);
376                  emms();                  emms();
377                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
378                  printf( "%s - sad16   %.3f usec       sad=%d\n", cpu->name, t, s );                  printf("%s - sad16   %.3f usec       sad=%d %s\n",
379                  if (s!=27214) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
380                               (s!=27214)?"| ERROR": "" );
381    
382                  t = gettime_usec();                  t = gettime_usec();
383                  emms();                  emms();
384                  for(tst=0; tst<nb_tests; ++tst) s = sad16bi(Cur, Ref1, Ref2, 16);                  for(tst=0; tst<nb_tests; ++tst) s = sad16bi(Cur, Ref1, Ref2, 16);
385                  emms();                  emms();
386                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
387                  printf( "%s - sad16bi %.3f usec       sad=%d\n", cpu->name, t, s );                  printf( "%s - sad16bi %.3f usec       sad=%d %s\n",
388                  if (s!=26274) printf( "*** CRC ERROR! ***\n" );                                  cpu->name, t, s,
389                                    (s!=26274)?"| ERROR": "" );
390    
391                  t = gettime_usec();                  t = gettime_usec();
392                  emms();                  emms();
393                  for(tst=0; tst<nb_tests; ++tst) s = dev16(Cur, 16);                  for(tst=0; tst<nb_tests; ++tst) s = dev16(Cur, 16);
394                  emms();                  emms();
395                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
396                  printf( "%s - dev16   %.3f usec       sad=%d\n", cpu->name, t, s );                  printf( "%s - dev16   %.3f usec       sad=%d %s\n",
397                  if (s!=3344) printf( "*** CRC ERROR! ***\n" );                                  cpu->name, t, s,
398                                    (s!=3344)?"| ERROR": "" );
399    
400                  printf( " --- \n" );                  printf( " --- \n" );
401          }          }
# Line 303  Line 413 
413  #define LEAVE \  #define LEAVE \
414  emms();                             \  emms();                             \
415  t = (gettime_usec() - t) / nb_tests;  \  t = (gettime_usec() - t) / nb_tests;  \
416  iCrc = 0;                           \          iCrc = calc_crc((uint8_t*)Dst, sizeof(Dst), CRC32_INITIAL)
 for(i=0; i<16*8; ++i) { iCrc += Dst[i]^i; }  
417    
418  #define TEST_MB(FUNC, R)                \  #define TEST_MB(FUNC, R)                \
419  ENTER                               \  ENTER                               \
# Line 323  Line 432 
432          CPU *cpu;          CPU *cpu;
433          const uint8_t Src0[16*9] = {          const uint8_t Src0[16*9] = {
434                  /* try to have every possible combinaison of rounding... */                  /* try to have every possible combinaison of rounding... */
435                  0, 0, 1, 0, 2, 0, 3, 0, 4             ,0,0,0, 0,0,0,0                  0, 0, 1, 0, 2, 0, 3, 0, 4             ,0,0,0, 0,0,0,0,
436                  , 0, 1, 1, 1, 2, 1, 3, 1, 3             ,0,0,0, 0,0,0,0                  0, 1, 1, 1, 2, 1, 3, 1, 3             ,0,0,0, 0,0,0,0,
437                  , 0, 2, 1, 2, 2, 2, 3, 2, 2             ,0,0,0, 0,0,0,0                  0, 2, 1, 2, 2, 2, 3, 2, 2             ,0,0,0, 0,0,0,0,
438                  , 0, 3, 1, 3, 2, 3, 3, 3, 1             ,0,0,0, 0,0,0,0                  0, 3, 1, 3, 2, 3, 3, 3, 1             ,0,0,0, 0,0,0,0,
439                  , 1, 3, 0, 2, 1, 0, 2, 3, 4             ,0,0,0, 0,0,0,0                  1, 3, 0, 2, 1, 0, 2, 3, 4             ,0,0,0, 0,0,0,0,
440                  , 2, 2, 1, 2, 0, 1, 3, 5, 3             ,0,0,0, 0,0,0,0                  2, 2, 1, 2, 0, 1, 3, 5, 3             ,0,0,0, 0,0,0,0,
441                  , 3, 1, 2, 3, 1, 2, 2, 6, 2             ,0,0,0, 0,0,0,0                  3, 1, 2, 3, 1, 2, 2, 6, 2             ,0,0,0, 0,0,0,0,
442                  , 1, 0, 1, 3, 0, 3, 1, 6, 1             ,0,0,0, 0,0,0,0                  1, 0, 1, 3, 0, 3, 1, 6, 1             ,0,0,0, 0,0,0,0,
443                  , 4, 3, 2, 1, 2, 3, 4, 0, 3             ,0,0,0, 0,0,0,0                  4, 3, 2, 1, 2, 3, 4, 0, 3             ,0,0,0, 0,0,0,0
444          };          };
445          uint8_t Dst[16*8] = {0};          uint8_t Dst[16*8] = {0};
446    
# Line 346  Line 455 
455                          continue;                          continue;
456    
457                  TEST_MB(interpolate8x8_halfpel_h, 0);                  TEST_MB(interpolate8x8_halfpel_h, 0);
458                  printf( "%s - interp- h-round0 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s - interp- h-round0 %.3f usec       crc32=0x%08x %s\n",
459                  if (iCrc!=8107) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
460                               (iCrc!=0x115381ba)?"| ERROR": "" );
461    
462                  TEST_MB(interpolate8x8_halfpel_h, 1);                  TEST_MB(interpolate8x8_halfpel_h, 1);
463                  printf( "%s -           round1 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s -           round1 %.3f usec       crc32=0x%08x %s\n",
464                  if (iCrc!=8100) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
465                               (iCrc!=0x2b1f528f)?"| ERROR": "" );
466    
467    
468                  TEST_MB(interpolate8x8_halfpel_v, 0);                  TEST_MB(interpolate8x8_halfpel_v, 0);
469                  printf( "%s - interp- v-round0 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s - interp- v-round0 %.3f usec       crc32=0x%08x %s\n",
470                  if (iCrc!=8108) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
471                               (iCrc!=0x423cdcc7)?"| ERROR": "" );
472    
473                  TEST_MB(interpolate8x8_halfpel_v, 1);                  TEST_MB(interpolate8x8_halfpel_v, 1);
474                  printf( "%s -           round1 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s -           round1 %.3f usec       crc32=0x%08x %s\n",
475                  if (iCrc!=8105) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
476                               (iCrc!=0x42202efe)?"| ERROR": "" );
477    
478    
479                  TEST_MB(interpolate8x8_halfpel_hv, 0);                  TEST_MB(interpolate8x8_halfpel_hv, 0);
480                  printf( "%s - interp-hv-round0 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s - interp-hv-round0 %.3f usec       crc32=0x%08x %s\n",
481                  if (iCrc!=8112) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
482                               (iCrc!=0xd198d387)?"| ERROR": "" );
483    
484                  TEST_MB(interpolate8x8_halfpel_hv, 1);                  TEST_MB(interpolate8x8_halfpel_hv, 1);
485                  printf( "%s -           round1 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s -           round1 %.3f usec       crc32=0x%08x %s\n",
486                  if (iCrc!=8103) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
487                               (iCrc!=0x9ecfd921)?"| ERROR": "" );
488    
489    
490                  /* this is a new function, as of 06.06.2002 */                  /* this is a new function, as of 06.06.2002 */
491  #if 0  #if 0
492                  TEST_MB2(interpolate8x8_avrg);                  TEST_MB2(interpolate8x8_avrg);
493                  printf( "%s - interpolate8x8_c %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s - interpolate8x8_c %.3f usec       crc32=0x%08x %s\n",
494                  if (iCrc!=8107) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
495                               (iCrc!=8107)?"| ERROR": "" );
496  #endif  #endif
497    
498                  printf( " --- \n" );                  printf( " --- \n" );
# Line 412  Line 528 
528  }                                         \  }                                         \
529  emms();                                   \  emms();                                   \
530  t = (gettime_usec()-t -overhead) / nb_tests;\  t = (gettime_usec()-t -overhead) / nb_tests;\
531  s = 0; for(i=0; i<8*32; ++i) { s += (DST)[i]^i; }  s = calc_crc((uint8_t*)(DST), sizeof((DST)), CRC32_INITIAL)
532    
533  #define TEST_TRANSFER(FUNC, DST, SRC)         \  #define TEST_TRANSFER(FUNC, DST, SRC)         \
534  TEST_TRANSFER_BEGIN(DST);                 \  TEST_TRANSFER_BEGIN(DST);                 \
# Line 438  Line 554 
554  }                                         \  }                                         \
555  emms();                                   \  emms();                                   \
556  t = (gettime_usec()-t -overhead) / nb_tests;\  t = (gettime_usec()-t -overhead) / nb_tests;\
557  s = 0; for(i=0; i<8*32; ++i) { s += (DST)[i]; }  s = calc_crc((uint8_t*)(DST), sizeof((DST)), CRC32_INITIAL)
558    
559  #define TEST_TRANSFER2(FUNC, DST, SRC, R1)    \  #define TEST_TRANSFER2(FUNC, DST, SRC, R1)    \
560  TEST_TRANSFER2_BEGIN(DST,SRC);            \  TEST_TRANSFER2_BEGIN(DST,SRC);            \
# Line 469  Line 585 
585                          continue;                          continue;
586    
587                  TEST_TRANSFER(transfer_8to16copy, Dst16, Src8);                  TEST_TRANSFER(transfer_8to16copy, Dst16, Src8);
588                  printf( "%s - 8to16     %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 8to16     %.3f usec       crc32=0x%08x %s\n",
589                  if (s!=28288) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
590                               (s!=0x115814bb)?"| ERROR": "");
591    
592                  TEST_TRANSFER(transfer_16to8copy, Dst8, Src16);                  TEST_TRANSFER(transfer_16to8copy, Dst8, Src16);
593                  printf( "%s - 16to8     %.3f usec       crc=%d\n", cpu->name, t, s );                  printf( "%s - 16to8     %.3f usec       crc32=0x%08x %s\n",
594                  if (s!=28288) printf( "*** CRC ERROR! ***\n" );                                  cpu->name, t, s,
595                                    (s!=0xee7ccbb4)?"| ERROR": "");
596    
597                  TEST_TRANSFER(transfer8x8_copy, Dst8, Src8);                  TEST_TRANSFER(transfer8x8_copy, Dst8, Src8);
598                  printf( "%s - 8to8      %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 8to8      %.3f usec       crc32=0x%08x %s\n",
599                  if (s!=20352) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
600                               (s!=0xd37b3295)?"| ERROR": "");
601    
602                  TEST_TRANSFER(transfer_16to8add, Dst8, Src16);                  TEST_TRANSFER(transfer_16to8add, Dst8, Src16);
603                  printf( "%s - 16to8add  %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 16to8add  %.3f usec       crc32=0x%08x %s\n",
604                  if (s!=25536) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
605                               (s!=0xdd817bf4)?"| ERROR": "" );
606    
607                  TEST_TRANSFER2(transfer_8to16sub, Dst16, Src8, Ref1);                  TEST_TRANSFER2(transfer_8to16sub, Dst16, Src8, Ref1);
608                  printf( "%s - 8to16sub  %.3f usec       crc1=%d ", cpu->name, t, s );                  {
609                  if (s!=28064) printf( "*** CRC ERROR! ***\n" );                          int s1, s2;
610                  s = 0; for(i=0; i<8*32; ++i) { s += (Src8[i]-Ref1[i])&i; }                          s1 = calc_crc((uint8_t*)Dst16, sizeof(Dst16), CRC32_INITIAL);
611                  printf( "crc2=%d\n", s);                          s2 = calc_crc((uint8_t*)Src8, sizeof(Src8), CRC32_INITIAL);
612                  if (s!=16256) printf( "*** CRC ERROR! ***\n" );                          printf("%s - 8to16sub  %.3f usec       crc32(1)=0x%08x crc32(2)=0x%08x %s %s\n",
613                                       cpu->name, t, s1, s2,
614                                       (s1!=0xa1e07163)?"| ERROR1": "",
615                                       (s2!=0xd86c5d23)?"| ERROR2": "" );
616                    }
617    
618                  TEST_TRANSFER3(transfer_8to16sub2, Dst16, Src8, Ref1, Ref2);                  TEST_TRANSFER3(transfer_8to16sub2, Dst16, Src8, Ref1, Ref2);
619                  printf( "%s - 8to16sub2 %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 8to16sub2 %.3f usec       crc32=0x%08x %s\n",
620                  if (s!=22368) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
621                               (s!=0x99b6c4c7)?"| ERROR": "" );
622    
623                  printf( " --- \n" );                  printf( " --- \n" );
624          }          }
# Line 505  Line 630 
630    
631  #define TEST_QUANT(FUNC, DST, SRC)              \  #define TEST_QUANT(FUNC, DST, SRC)              \
632  t = gettime_usec();                         \  t = gettime_usec();                         \
633  for(s=0,qm=1; qm<=255; ++qm) {              \  for(s=CRC32_INITIAL,qm=1; qm<=255; ++qm) {              \
634    for(i=0; i<8*8; ++i) Quant[i] = qm;       \    for(i=0; i<8*8; ++i) Quant[i] = qm;       \
635    set_inter_matrix( Quant );                \    set_inter_matrix( mpeg_quant_matrices, Quant );                \
636    emms();                                   \    emms();                                   \
637    for(q=1; q<=max_Q; ++q) {                 \    for(q=1; q<=max_Q; ++q) {                 \
638          for(tst=0; tst<nb_tests; ++tst)         \          for(tst=0; tst<nb_tests; ++tst)         \
639            (FUNC)((DST), (SRC), q);              \            (FUNC)((DST), (SRC), q, mpeg_quant_matrices);              \
640          for(i=0; i<64; ++i) s+=(DST)[i]^i^qm;   \          s = calc_crc((uint8_t*)(DST), 64*sizeof(int16_t), s); \
641    }                                         \    }                                         \
642    emms();                                   \    emms();                                   \
643  }                                           \  }                                           \
644  t = (gettime_usec()-t-overhead)/nb_tests/qm;\  t = (gettime_usec()-t-overhead)/nb_tests/qm
 s = (s&0xffff)^(s>>16)  
645    
646  #define TEST_QUANT2(FUNC, DST, SRC)             \  #define TEST_QUANT2(FUNC, DST, SRC)             \
647  t = gettime_usec();                         \  t = gettime_usec();                         \
648  for(s=0,qm=1; qm<=255; ++qm) {              \  for(s=CRC32_INITIAL,qm=1; qm<=255; ++qm) {              \
649    for(i=0; i<8*8; ++i) Quant[i] = qm;       \    for(i=0; i<8*8; ++i) Quant[i] = qm;       \
650    set_intra_matrix( Quant );                \    set_intra_matrix( mpeg_quant_matrices, Quant );                \
651    emms();                                   \    emms();                                   \
652    for(q=1; q<=max_Q; ++q) {                 \    for(q=1; q<=max_Q; ++q) {                 \
653          for(tst=0; tst<nb_tests; ++tst)         \          for(tst=0; tst<nb_tests; ++tst)         \
654            (FUNC)((DST), (SRC), q, q);           \            (FUNC)((DST), (SRC), q, q, mpeg_quant_matrices);           \
655          for(i=0; i<64; ++i) s+=(DST)[i]^i^qm;   \          s = calc_crc((uint8_t*)(DST), 64*sizeof(int16_t), s); \
656      }                                         \
657      emms();                                   \
658    }                                           \
659    t = (gettime_usec()-t-overhead)/nb_tests/qm
660    
661    #define TEST_INTRA(REFFUNC, NEWFUNC, RANGE)              \
662    { int i,q,s;\
663            DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16); \
664      DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16); \
665      DECLARE_ALIGNED_MATRIX(Dst2,8, 8, int16_t, 16); \
666      for(q=1;q<=max_Q;q++)          \
667        for(s=-RANGE;s<RANGE;s++) { \
668          for(i=0;i<64;i++) Src[i]=s; \
669          (REFFUNC)((Dst),(Src),q,q,mpeg_quant_matrices);   \
670          (NEWFUNC)((Dst2),(Src),q,q,mpeg_quant_matrices);  \
671          for(i=0;i<64;i++)     \
672            if(Dst[i]!=Dst2[i]) printf("ERROR : " #NEWFUNC " i%d quant:%d input:%d C_result:%d ASM_result:%d\n",i,q,s,Dst[i],Dst2[i]);  \
673    }                                         \    }                                         \
674    }
675    
676    #define TEST_INTER(REFFUNC, NEWFUNC, RANGE)              \
677    { int i,q,s;  \
678            DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16); \
679      DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16); \
680      DECLARE_ALIGNED_MATRIX(Dst2,8, 8, int16_t, 16); \
681      for(q=1;q<=max_Q;q++)  \
682        for(s=-RANGE;s<RANGE;s++) {   \
683          for(i=0;i<64;i++) Src[i]=s; \
684          (REFFUNC)((Dst),(Src),q,mpeg_quant_matrices);  \
685          (NEWFUNC)((Dst2),(Src),q,mpeg_quant_matrices); \
686    emms();                                   \    emms();                                   \
687          for(i=0;i<64;i++) \
688            if(Dst[i]!=Dst2[i]) printf("ERROR : " #NEWFUNC " i%d quant:%d input:%d C_result:%d ASM_result:%d\n",i,q,s,Dst[i],Dst2[i]); \
689  }                                           \  }                                           \
690  t = (gettime_usec()-t-overhead)/nb_tests/qm;\  }
 s = (s&0xffff)^(s>>16)  
691    
692  void test_quant()  void test_quant()
693  {  {
694          const int nb_tests = 1*speed_ref;          const int nb_tests = 1*speed_ref;
695          const int max_Q = 31;          const int max_Q = 31;
696            DECLARE_ALIGNED_MATRIX(mpeg_quant_matrices, 8, 64, uint16_t, 16);
697    
698          int i, qm;          int i, qm;
699          CPU *cpu;          CPU *cpu;
700          int16_t  Src[8*8], Dst[8*8];          DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16);
701            DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16);
702            DECLARE_ALIGNED_MATRIX(Dst2,8, 8, int16_t, 16);
703          uint8_t Quant[8*8];          uint8_t Quant[8*8];
704    
705          printf( "\n =====  test quant =====\n" );          printf( "\n =====  test quant =====\n" );
# Line 562  Line 720 
720                  if (!init_cpu(cpu))                  if (!init_cpu(cpu))
721                  continue;                  continue;
722    
723                    // exhaustive tests to compare against the (ref) C-version
724                    TEST_INTRA(quant_h263_intra_c,   quant_h263_intra,    2048);
725                    TEST_INTRA(dequant_h263_intra_c, dequant_h263_intra , 512 );
726                    TEST_INTER(quant_h263_inter_c,   quant_h263_inter ,   2048);
727                    TEST_INTER(dequant_h263_inter_c, dequant_h263_inter , 512 );
728    
729                  overhead = -gettime_usec();                  overhead = -gettime_usec();
730                  for(s=0,qm=1; qm<=255; ++qm) {                  for(s=0,qm=1; qm<=255; ++qm) {
731                          for(i=0; i<8*8; ++i) Quant[i] = qm;                          for(i=0; i<8*8; ++i) Quant[i] = qm;
732                          set_inter_matrix( Quant );                          set_inter_matrix(mpeg_quant_matrices, Quant );
733                          for(q=1; q<=max_Q; ++q)                          for(q=1; q<=max_Q; ++q)
734                                  for(i=0; i<64; ++i) s+=Dst[i]^i^qm;                                  for(i=0; i<64; ++i) s+=Dst[i]^i^qm;
735                  }                  }
736                  overhead += gettime_usec();                  overhead += gettime_usec();
737    
 #if 1  
738                  TEST_QUANT2(quant_mpeg_intra, Dst, Src);                  TEST_QUANT2(quant_mpeg_intra, Dst, Src);
739                  printf( "%s -   quant_mpeg_intra %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s -   quant_mpeg_intra %.3f usec       crc32=0x%08x %s\n",
740                  if (s!=29809) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
741                               (s!=0xfd6a21a4)? "| ERROR": "");
742    
743                  TEST_QUANT(quant_mpeg_inter, Dst, Src);                  TEST_QUANT(quant_mpeg_inter, Dst, Src);
744                  printf( "%s -   quant_mpeg_inter %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s -   quant_mpeg_inter %.3f usec       crc32=0x%08x %s\n",
745                  if (s!=12574) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
746  #endif                             (s!=0xf6de7757)?"| ERROR": "");
747  #if 1  
748                  TEST_QUANT2(dequant_mpeg_intra, Dst, Src);                  TEST_QUANT2(dequant_mpeg_intra, Dst, Src);
749                  printf( "%s - dequant_mpeg_intra %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - dequant_mpeg_intra %.3f usec       crc32=0x%08x %s\n",
750                  if (s!=24052) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
751                               (s!=0x2def7bc7)?"| ERROR": "");
752    
753                  TEST_QUANT(dequant_mpeg_inter, Dst, Src);                  TEST_QUANT(dequant_mpeg_inter, Dst, Src);
754                  printf( "%s - dequant_mpeg_inter %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - dequant_mpeg_inter %.3f usec       crc32=0x%08x %s\n",
755                  if (s!=63847) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
756  #endif                             (s!=0xd878c722)?"| ERROR": "");
757  #if 1  
758                  TEST_QUANT2(quant_h263_intra, Dst, Src);                  TEST_QUANT2(quant_h263_intra, Dst, Src);
759                  printf( "%s -   quant_h263_intra %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s -   quant_h263_intra %.3f usec       crc32=0x%08x %s\n",
760                  if (s!=25662) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
761                               (s!=0x2eba9d43)?"| ERROR": "");
762    
763                  TEST_QUANT(quant_h263_inter, Dst, Src);                  TEST_QUANT(quant_h263_inter, Dst, Src);
764                  printf( "%s -   quant_h263_inter %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s -   quant_h263_inter %.3f usec       crc32=0x%08x %s\n",
765                  if (s!=23972) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
766  #endif                             (s!=0xbd315a7e)?"| ERROR": "");
767  #if 1  
768                  TEST_QUANT2(dequant_h263_intra, Dst, Src);                  TEST_QUANT2(dequant_h263_intra, Dst, Src);
769                  printf( "%s - dequant_h263_intra %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - dequant_h263_intra %.3f usec       crc32=0x%08x %s\n",
770                  if (s!=49900) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
771                               (s!=0x9841212a)?"| ERROR": "");
772    
773                  TEST_QUANT(dequant_h263_inter, Dst, Src);                  TEST_QUANT(dequant_h263_inter, Dst, Src);
774                  printf( "%s - dequant_h263_inter %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - dequant_h263_inter %.3f usec       crc32=0x%08x %s\n",
775                  if (s!=48899) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
776  #endif                             (s!=0xe7df8fba)?"| ERROR": "");
777    
778                    printf( " --- \n" );
779            }
780    }
781    
782    /*********************************************************************
783     * test distortion operators
784     *********************************************************************/
785    
786    static void ieee_reseed(long s);
787    static long ieee_rand(int Min, int Max);
788    
789    #define TEST_SSE(FUNCTION, SRC1, SRC2, STRIDE) \
790      do { \
791        t = gettime_usec(); \
792        tst = nb_tests; \
793        while((tst--)>0) sse = (FUNCTION)((SRC1), (SRC2), (STRIDE)); \
794        emms(); \
795        t = (gettime_usec() - t)/(double)nb_tests;  \
796      } while(0)
797    
798    
799    void test_sse()
800    {
801            const int nb_tests = 100000*speed_ref;
802            int i;
803            CPU *cpu;
804            DECLARE_ALIGNED_MATRIX(Src1, 8, 8, int16_t, 16);
805            DECLARE_ALIGNED_MATRIX(Src2, 8, 8, int16_t, 16);
806            DECLARE_ALIGNED_MATRIX(Src3, 8, 8, int16_t, 16);
807            DECLARE_ALIGNED_MATRIX(Src4, 8, 8, int16_t, 16);
808    
809            printf( "\n =====  test sse =====\n" );
810    
811            ieee_reseed(1);
812            for(i=0; i<64; ++i) {
813                    Src1[i] = ieee_rand(-2048, 2047);
814                    Src2[i] = ieee_rand(-2048, 2047);
815                    Src3[i] = ieee_rand(-2048, 2047);
816                    Src4[i] = ieee_rand(-2048, 2047);
817            }
818    
819            for(cpu = cpu_list; cpu->name!=0; ++cpu)
820            {
821                    double t;
822                    int tst, sse;
823    
824                    if (!init_cpu(cpu))
825                            continue;
826    
827                    /* 16 bit element blocks */
828                    TEST_SSE(sse8_16bit, Src1, Src2, 16);
829                    printf("%s -   sse8_16bit#1 %.3f usec       sse=%d %s\n",
830                               cpu->name, t, sse, (sse!=182013834)?"| ERROR": "");
831                    TEST_SSE(sse8_16bit, Src1, Src3, 16);
832                    printf("%s -   sse8_16bit#2 %.3f usec       sse=%d %s\n",
833                               cpu->name, t, sse, (sse!=142545203)?"| ERROR": "");
834                    TEST_SSE(sse8_16bit, Src1, Src4, 16);
835                    printf("%s -   sse8_16bit#3 %.3f usec       sse=%d %s\n",
836                               cpu->name, t, sse, (sse!=146340935)?"| ERROR": "");
837                    TEST_SSE(sse8_16bit, Src2, Src3, 16);
838                    printf("%s -   sse8_16bit#4 %.3f usec       sse=%d %s\n",
839                               cpu->name, t, sse, (sse!=130136661)?"| ERROR": "");
840                    TEST_SSE(sse8_16bit, Src2, Src4, 16);
841                    printf("%s -   sse8_16bit#5 %.3f usec       sse=%d %s\n",
842                               cpu->name, t, sse, (sse!=136870353)?"| ERROR": "");
843                    TEST_SSE(sse8_16bit, Src3, Src4, 16);
844                    printf("%s -   sse8_16bit#6 %.3f usec       sse=%d %s\n",
845                               cpu->name, t, sse, (sse!=164107772)?"| ERROR": "");
846    
847                    /* 8 bit element blocks */
848                    TEST_SSE(sse8_8bit, (int8_t*)Src1, (int8_t*)Src2, 8);
849                    printf("%s -    sse8_8bit#1 %.3f usec       sse=%d %s\n",
850                               cpu->name, t, sse, (sse!=1356423)?"| ERROR": "");
851                    TEST_SSE(sse8_8bit, (int8_t*)Src1, (int8_t*)Src3, 8);
852                    printf("%s -    sse8_8bit#2 %.3f usec       sse=%d %s\n",
853                               cpu->name, t, sse, (sse!=1173074)?"| ERROR": "");
854                    TEST_SSE(sse8_8bit, (int8_t*)Src1, (int8_t*)Src4, 8);
855                    printf("%s -    sse8_8bit#3 %.3f usec       sse=%d %s\n",
856                               cpu->name, t, sse, (sse!=1092357)?"| ERROR": "");
857                    TEST_SSE(sse8_8bit, (int8_t*)Src2, (int8_t*)Src3, 8);
858                    printf("%s -    sse8_8bit#4 %.3f usec       sse=%d %s\n",
859                               cpu->name, t, sse, (sse!=1360239)?"| ERROR": "");
860                    TEST_SSE(sse8_8bit, (int8_t*)Src2, (int8_t*)Src4, 8);
861                    printf("%s -    sse8_8bit#5 %.3f usec       sse=%d %s\n",
862                               cpu->name, t, sse, (sse!=1208414)?"| ERROR": "");
863                    TEST_SSE(sse8_8bit, (int8_t*)Src3, (int8_t*)Src4, 8);
864                    printf("%s -    sse8_8bit#6 %.3f usec       sse=%d %s\n",
865                               cpu->name, t, sse, (sse!=1099285)?"| ERROR": "");
866    
867                  printf( " --- \n" );                  printf( " --- \n" );
868          }          }
869  }  }
# Line 629  Line 886 
886          const int nb_tests = 10000*speed_ref;          const int nb_tests = 10000*speed_ref;
887          int i;          int i;
888          CPU *cpu;          CPU *cpu;
889          int16_t  Src1[6*64], Src2[6*64], Src3[6*64], Src4[6*64];          DECLARE_ALIGNED_MATRIX(Src1, 6, 64, int16_t, 16);
890            DECLARE_ALIGNED_MATRIX(Src2, 6, 64, int16_t, 16);
891            DECLARE_ALIGNED_MATRIX(Src3, 6, 64, int16_t, 16);
892            DECLARE_ALIGNED_MATRIX(Src4, 6, 64, int16_t, 16);
893    
894          printf( "\n =====  test cbp =====\n" );          printf( "\n =====  test cbp =====\n" );
895    
# Line 649  Line 909 
909                          continue;                          continue;
910    
911                  TEST_CBP(calc_cbp, Src1);                  TEST_CBP(calc_cbp, Src1);
912                  printf( "%s -   calc_cbp#1 %.3f usec       cbp=0x%x\n", cpu->name, t, cbp );                  printf("%s -   calc_cbp#1 %.3f usec       cbp=0x%02x %s\n",
913                  if (cbp!=0x15) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x15)?"| ERROR": "");
914                  TEST_CBP(calc_cbp, Src2);                  TEST_CBP(calc_cbp, Src2);
915                  printf( "%s -   calc_cbp#2 %.3f usec       cbp=0x%x\n", cpu->name, t, cbp );                  printf("%s -   calc_cbp#2 %.3f usec       cbp=0x%02x %s\n",
916                  if (cbp!=0x38) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x38)?"| ERROR": "");
917                  TEST_CBP(calc_cbp, Src3);                  TEST_CBP(calc_cbp, Src3);
918                  printf( "%s -   calc_cbp#3 %.3f usec       cbp=0x%x\n", cpu->name, t, cbp );                  printf("%s -   calc_cbp#3 %.3f usec       cbp=0x%02x %s\n",
919                  if (cbp!=0x0f) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x0f)?"| ERROR": "" );
920                  TEST_CBP(calc_cbp, Src4);                  TEST_CBP(calc_cbp, Src4);
921                  printf( "%s -   calc_cbp#4 %.3f usec       cbp=0x%x\n", cpu->name, t, cbp );                  printf("%s -   calc_cbp#4 %.3f usec       cbp=0x%02x %s\n",
922                  if (cbp!=0x05) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x05)?"| ERROR": "" );
923                  printf( " --- \n" );                  printf( " --- \n" );
924          }          }
925  }  }
# Line 1163  Line 1423 
1423  void test_bugs1()  void test_bugs1()
1424  {  {
1425          CPU *cpu;          CPU *cpu;
1426            uint16_t mpeg_quant_matrices[64*8];
1427    
1428          printf( "\n =====  (de)quant4_intra saturation bug? =====\n" );          printf( "\n =====  (de)quant4_intra saturation bug? =====\n" );
1429    
# Line 1175  Line 1436 
1436                          continue;                          continue;
1437    
1438                  for(i=0; i<64; ++i) Src[i] = i-32;                  for(i=0; i<64; ++i) Src[i] = i-32;
1439                  set_intra_matrix( get_default_intra_matrix() );                  set_intra_matrix( mpeg_quant_matrices, get_default_intra_matrix() );
1440                  dequant_mpeg_intra(Dst, Src, 31, 5);                  dequant_mpeg_intra(Dst, Src, 31, 5, mpeg_quant_matrices);
1441                  printf( "dequant_mpeg_intra with CPU=%s:  ", cpu->name);                  printf( "dequant_mpeg_intra with CPU=%s:  ", cpu->name);
1442                  printf( "  Out[]= " );                  printf( "  Out[]= " );
1443                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);
# Line 1194  Line 1455 
1455                          continue;                          continue;
1456    
1457                  for(i=0; i<64; ++i) Src[i] = i-32;                  for(i=0; i<64; ++i) Src[i] = i-32;
1458                  set_inter_matrix( get_default_inter_matrix() );                  set_inter_matrix( mpeg_quant_matrices, get_default_inter_matrix() );
1459                  dequant_mpeg_inter(Dst, Src, 31);                  dequant_mpeg_inter(Dst, Src, 31, mpeg_quant_matrices);
1460                  printf( "dequant_mpeg_inter with CPU=%s:  ", cpu->name);                  printf( "dequant_mpeg_inter with CPU=%s:  ", cpu->name);
1461                  printf( "  Out[]= " );                  printf( "  Out[]= " );
1462                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);
# Line 1206  Line 1467 
1467  void test_dct_precision_diffs()  void test_dct_precision_diffs()
1468  {  {
1469          CPU *cpu;          CPU *cpu;
1470          short Blk[8*8], Blk0[8*8];          DECLARE_ALIGNED_MATRIX(Blk, 8, 8, int16_t, 16);
1471            DECLARE_ALIGNED_MATRIX(Blk0, 8, 8, int16_t, 16);
1472    
1473          printf( "\n =====  fdct/idct precision diffs =====\n" );          printf( "\n =====  fdct/idct precision diffs =====\n" );
1474    
# Line 1239  Line 1501 
1501          const int max_Q = 31;          const int max_Q = 31;
1502          int i, n, qm, q;          int i, n, qm, q;
1503          CPU *cpu;          CPU *cpu;
1504          int16_t  Src[8*8], Dst[8*8];          DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16);
1505            DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16);
1506          uint8_t Quant[8*8];          uint8_t Quant[8*8];
1507          CPU cpu_bug_list[] = { { "PLAINC", 0 }, { "MMX   ", XVID_CPU_MMX }, {0,0} };          CPU cpu_bug_list[] = { { "PLAINC", 0 }, { "MMX   ", XVID_CPU_MMX }, {0,0} };
1508          uint16_t Crcs_Inter[2][32];          uint16_t Crcs_Inter[2][32];
1509          uint16_t Crcs_Intra[2][32];          uint16_t Crcs_Intra[2][32];
1510            DECLARE_ALIGNED_MATRIX(mpeg_quant_matrices, 8, 64, uint16_t, 16);
1511    
1512          printf( "\n =====  test MPEG4-quantize bug =====\n" );          printf( "\n =====  test MPEG4-quantize bug =====\n" );
1513    
1514          for(i=0; i<64; ++i) Src[i] = 2048*(i-32)/32;          for(i=0; i<64; ++i) Src[i] = 2048*(i-32)/32;
# Line 1252  Line 1517 
1517          for(qm=1; qm<=255; ++qm)          for(qm=1; qm<=255; ++qm)
1518          {          {
1519                  for(i=0; i<8*8; ++i) Quant[i] = qm;                  for(i=0; i<8*8; ++i) Quant[i] = qm;
1520                  set_inter_matrix( Quant );                  set_inter_matrix( mpeg_quant_matrices, Quant );
1521    
1522                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)
1523                  {                  {
# Line 1263  Line 1528 
1528    
1529                          for(q=1; q<=max_Q; ++q) {                          for(q=1; q<=max_Q; ++q) {
1530                                  emms();                                  emms();
1531                                  quant_mpeg_inter( Dst, Src, q );                                  quant_mpeg_inter( Dst, Src, q, mpeg_quant_matrices );
1532                                  emms();                                  emms();
1533                                  for(s=0, i=0; i<64; ++i) s+=((uint16_t)Dst[i])^i;                                  for(s=0, i=0; i<64; ++i) s+=((uint16_t)Dst[i])^i;
1534                                  Crcs_Inter[n][q] = s;                                  Crcs_Inter[n][q] = s;
# Line 1282  Line 1547 
1547          for(qm=1; qm<=255; ++qm)          for(qm=1; qm<=255; ++qm)
1548          {          {
1549                  for(i=0; i<8*8; ++i) Quant[i] = qm;                  for(i=0; i<8*8; ++i) Quant[i] = qm;
1550                  set_intra_matrix( Quant );                  set_intra_matrix( mpeg_quant_matrices, Quant );
1551    
1552                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)
1553                  {                  {
# Line 1293  Line 1558 
1558    
1559                          for(q=1; q<=max_Q; ++q) {                          for(q=1; q<=max_Q; ++q) {
1560                                  emms();                                  emms();
1561                                  quant_mpeg_intra( Dst, Src, q, q);                                  quant_mpeg_intra( Dst, Src, q, q, mpeg_quant_matrices);
1562                                  emms();                                  emms();
1563                                  for(s=0, i=0; i<64; ++i) s+=((uint16_t)Dst[i])^i;                                  for(s=0, i=0; i<64; ++i) s+=((uint16_t)Dst[i])^i;
1564                                  Crcs_Intra[n][q] = s;                                  Crcs_Intra[n][q] = s;
# Line 1323  Line 1588 
1588          if (what==0 || what==4) test_transfer();          if (what==0 || what==4) test_transfer();
1589          if (what==0 || what==5) test_quant();          if (what==0 || what==5) test_quant();
1590          if (what==0 || what==6) test_cbp();          if (what==0 || what==6) test_cbp();
1591            if (what==0 || what==10) test_sse();
1592    
1593          if (what==7) {          if (what==7) {
1594                  test_IEEE1180_compliance(-256, 255, 1);                  test_IEEE1180_compliance(-256, 255, 1);
# Line 1352  Line 1618 
1618          if (what==-2)          if (what==-2)
1619                  test_quant_bug();                  test_quant_bug();
1620    
1621            if ((what >= 0 && what <= 6) || what == 10) {
1622                    printf("\n\n"
1623                               "NB: If a function isn't optimised for a specific set of intructions,\n"
1624                               "    a C function is used instead. So don't panic if some functions\n"
1625                               "    may appear to be slow.\n");
1626            }
1627    
1628    #ifdef ARCH_IS_IA32
1629            if (what == 0 || what == 5) {
1630                    printf("\n"
1631                               "NB: MMX mpeg4 quantization is known to have very small errors (+/-1 magnitude)\n"
1632                               "    for 1 or 2 coefficients a block. This is mainly caused by the fact the unit\n"
1633                               "    test goes far behind the usual limits of real encoding. Please do not report\n"
1634                               "    this error to the developers.\n");
1635            }
1636    #endif
1637    
1638          return 0;          return 0;
1639  }  }
1640    
# Line 1359  Line 1642 
1642   * 'Reference' output (except for timing) on an Athlon XP 2200+   * 'Reference' output (except for timing) on an Athlon XP 2200+
1643   *********************************************************************/   *********************************************************************/
1644    
1645  /* as of 07/01/2002, there's a problem with MMX mpeg4-quantization */  /* as of 2002-01-07, there's a problem with MMX mpeg4-quantization */
1646  /*  /* as of 2003-11-30, the problem is still here */
1647    
1648    /*********************************************************************
1649    
1650    
1651   ===== test fdct/idct =====   ===== test fdct/idct =====
1652  PLAINC -  1.446 usec       PSNR=13.291  MSE=3.000  PLAINC -  2.867 usec       PSNR=13.291  MSE=3.000
1653  MMX    -  -0.260 usec       PSNR=9.611  MSE=7.000  MMX    -  -0.211 usec       PSNR=9.611  MSE=7.000
1654  MMXEXT -  -0.293 usec       PSNR=9.611  MSE=7.000  MMXEXT -  -0.256 usec       PSNR=9.611  MSE=7.000
1655  3DNOW  -  1.535 usec       PSNR=13.291  MSE=3.000  3DNOW  -  2.855 usec       PSNR=13.291  MSE=3.000
1656  3DNOWE -  0.376 usec       PSNR=13.291  MSE=3.000  3DNOWE -  1.429 usec       PSNR=13.291  MSE=3.000
1657    
1658   ===  test block motion ===   ===  test block motion ===
1659  PLAINC - interp- h-round0 0.126 usec       iCrc=8107  PLAINC - interp- h-round0 0.538 usec       crc32=0x115381ba
1660  PLAINC -           round1 0.136 usec       iCrc=8100  PLAINC -           round1 0.527 usec       crc32=0x2b1f528f
1661  PLAINC - interp- v-round0 0.121 usec       iCrc=8108  PLAINC - interp- v-round0 0.554 usec       crc32=0x423cdcc7
1662  PLAINC -           round1 0.127 usec       iCrc=8105  PLAINC -           round1 0.551 usec       crc32=0x42202efe
1663  PLAINC - interp-hv-round0 0.192 usec       iCrc=8112  PLAINC - interp-hv-round0 1.041 usec       crc32=0xd198d387
1664  PLAINC -           round1 0.213 usec       iCrc=8103  PLAINC -           round1 1.038 usec       crc32=0x9ecfd921
1665   ---   ---
1666  MMX    - interp- h-round0 0.048 usec       iCrc=8107  MMX    - interp- h-round0 0.051 usec       crc32=0x115381ba
1667  MMX    -           round1 0.048 usec       iCrc=8100  MMX    -           round1 0.053 usec       crc32=0x2b1f528f
1668  MMX    - interp- v-round0 0.046 usec       iCrc=8108  MMX    - interp- v-round0 0.048 usec       crc32=0x423cdcc7
1669  MMX    -           round1 0.047 usec       iCrc=8105  MMX    -           round1 0.048 usec       crc32=0x42202efe
1670  MMX    - interp-hv-round0 0.074 usec       iCrc=8112  MMX    - interp-hv-round0 0.074 usec       crc32=0xd198d387
1671  MMX    -           round1 0.074 usec       iCrc=8103  MMX    -           round1 0.073 usec       crc32=0x9ecfd921
1672   ---   ---
1673  MMXEXT - interp- h-round0 0.019 usec       iCrc=8107  MMXEXT - interp- h-round0 0.020 usec       crc32=0x115381ba
1674  MMXEXT -           round1 0.025 usec       iCrc=8100  MMXEXT -           round1 0.025 usec       crc32=0x2b1f528f
1675  MMXEXT - interp- v-round0 0.015 usec       iCrc=8108  MMXEXT - interp- v-round0 0.016 usec       crc32=0x423cdcc7
1676  MMXEXT -           round1 0.024 usec       iCrc=8105  MMXEXT -           round1 0.024 usec       crc32=0x42202efe
1677  MMXEXT - interp-hv-round0 0.039 usec       iCrc=8112  MMXEXT - interp-hv-round0 0.037 usec       crc32=0xd198d387
1678  MMXEXT -           round1 0.037 usec       iCrc=8103  MMXEXT -           round1 0.037 usec       crc32=0x9ecfd921
1679   ---   ---
1680  3DNOW  - interp- h-round0 0.019 usec       iCrc=8107  3DNOW  - interp- h-round0 0.020 usec       crc32=0x115381ba
1681  3DNOW  -           round1 0.023 usec       iCrc=8100  3DNOW  -           round1 0.029 usec       crc32=0x2b1f528f
1682  3DNOW  - interp- v-round0 0.015 usec       iCrc=8108  3DNOW  - interp- v-round0 0.016 usec       crc32=0x423cdcc7
1683  3DNOW  -           round1 0.024 usec       iCrc=8105  3DNOW  -           round1 0.024 usec       crc32=0x42202efe
1684  3DNOW  - interp-hv-round0 0.037 usec       iCrc=8112  3DNOW  - interp-hv-round0 0.038 usec       crc32=0xd198d387
1685  3DNOW  -           round1 0.038 usec       iCrc=8103  3DNOW  -           round1 0.039 usec       crc32=0x9ecfd921
1686   ---   ---
1687  3DNOWE - interp- h-round0 0.022 usec       iCrc=8107  3DNOWE - interp- h-round0 0.020 usec       crc32=0x115381ba
1688  3DNOWE -           round1 0.023 usec       iCrc=8100  3DNOWE -           round1 0.024 usec       crc32=0x2b1f528f
1689  3DNOWE - interp- v-round0 0.016 usec       iCrc=8108  3DNOWE - interp- v-round0 0.016 usec       crc32=0x423cdcc7
1690  3DNOWE -           round1 0.021 usec       iCrc=8105  3DNOWE -           round1 0.021 usec       crc32=0x42202efe
1691  3DNOWE - interp-hv-round0 0.036 usec       iCrc=8112  3DNOWE - interp-hv-round0 0.037 usec       crc32=0xd198d387
1692  3DNOWE -           round1 0.036 usec       iCrc=8103  3DNOWE -           round1 0.036 usec       crc32=0x9ecfd921
1693   ---   ---
1694    
1695   ======  test SAD ======   ======  test SAD ======
1696  PLAINC - sad8    0.165 usec       sad=3776  PLAINC - sad8    0.505 usec       sad=3776
1697  PLAINC - sad16   0.587 usec       sad=27214  PLAINC - sad16   1.941 usec       sad=27214
1698  PLAINC - sad16bi 1.290 usec       sad=26274  PLAINC - sad16bi 4.925 usec       sad=26274
1699  PLAINC - dev16   1.535 usec       sad=3344  PLAINC - dev16   4.254 usec       sad=3344
1700   ---   ---
1701  MMX    - sad8    0.036 usec       sad=3776  MMX    - sad8    0.036 usec       sad=3776
1702  MMX    - sad16   0.113 usec       sad=27214  MMX    - sad16   0.107 usec       sad=27214
1703  MMX    - sad16bi 0.250 usec       sad=26274  MMX    - sad16bi 0.259 usec       sad=26274
1704  MMX    - dev16   0.187 usec       sad=3344  MMX    - dev16   0.187 usec       sad=3344
1705   ---   ---
1706  MMXEXT - sad8    0.015 usec       sad=3776  MMXEXT - sad8    0.016 usec       sad=3776
1707  MMXEXT - sad16   0.046 usec       sad=27214  MMXEXT - sad16   0.050 usec       sad=27214
1708  MMXEXT - sad16bi 0.059 usec       sad=26274  MMXEXT - sad16bi 0.060 usec       sad=26274
1709  MMXEXT - dev16   0.088 usec       sad=3344  MMXEXT - dev16   0.086 usec       sad=3344
1710   ---   ---
1711  3DNOW  - sad8    0.165 usec       sad=3776  3DNOW  - sad8    0.506 usec       sad=3776
1712  3DNOW  - sad16   0.589 usec       sad=27214  3DNOW  - sad16   1.954 usec       sad=27214
1713  3DNOW  - sad16bi 0.119 usec       sad=26274  3DNOW  - sad16bi 0.119 usec       sad=26274
1714  3DNOW  - dev16   1.541 usec       sad=3344  3DNOW  - dev16   4.252 usec       sad=3344
1715   ---   ---
1716  3DNOWE - sad8    0.018 usec       sad=3776  3DNOWE - sad8    0.017 usec       sad=3776
1717  3DNOWE - sad16   0.039 usec       sad=27214  3DNOWE - sad16   0.038 usec       sad=27214
1718  3DNOWE - sad16bi 0.051 usec       sad=26274  3DNOWE - sad16bi 0.052 usec       sad=26274
1719  3DNOWE - dev16   0.070 usec       sad=3344  3DNOWE - dev16   0.067 usec       sad=3344
1720   ---   ---
1721    
1722   ===  test transfer ===   ===  test transfer ===
1723  PLAINC - 8to16     0.207 usec       crc=28288  PLAINC - 8to16     0.603 usec       crc32=0x115814bb
1724  PLAINC - 16to8     0.357 usec       crc=28288  PLAINC - 16to8     1.077 usec       crc32=0xee7ccbb4
1725  PLAINC - 8to8      0.154 usec       crc=20352  PLAINC - 8to8      0.679 usec       crc32=0xd37b3295
1726  PLAINC - 16to8add  0.391 usec       crc=25536  PLAINC - 16to8add  1.341 usec       crc32=0xdd817bf4
1727  PLAINC - 8to16sub  0.562 usec       crc1=28064 crc2=16256  PLAINC - 8to16sub  1.566 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1728  PLAINC - 8to16sub2 0.519 usec       crc=22368  PLAINC - 8to16sub2 2.206 usec       crc32=0x99b6c4c7
1729   ---   ---
1730  MMX    - 8to16     0.048 usec       crc=28288  MMX    - 8to16     -0.025 usec       crc32=0x115814bb
1731  MMX    - 16to8     0.205 usec       crc=28288  MMX    - 16to8     -0.049 usec       crc32=0xee7ccbb4
1732  MMX    - 8to8      -0.158 usec       crc=20352  MMX    - 8to8      0.014 usec       crc32=0xd37b3295
1733  MMX    - 16to8add  0.015 usec       crc=25536  MMX    - 16to8add  0.011 usec       crc32=0xdd817bf4
1734  MMX    - 8to16sub  0.203 usec       crc1=28064 crc2=16256  MMX    - 8to16sub  0.108 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1735  MMX    - 8to16sub2 0.087 usec       crc=22368  MMX    - 8to16sub2 0.164 usec       crc32=0x99b6c4c7
1736   ---   ---
1737  MMXEXT - 8to16     0.013 usec       crc=28288  MMXEXT - 8to16     -0.054 usec       crc32=0x115814bb
1738  MMXEXT - 16to8     0.011 usec       crc=28288  MMXEXT - 16to8     0.010 usec       crc32=0xee7ccbb4
1739  MMXEXT - 8to8      -0.023 usec       crc=20352  MMXEXT - 8to8      0.015 usec       crc32=0xd37b3295
1740  MMXEXT - 16to8add  0.023 usec       crc=25536  MMXEXT - 16to8add  0.008 usec       crc32=0xdd817bf4
1741  MMXEXT - 8to16sub  0.072 usec       crc1=28064 crc2=16256  MMXEXT - 8to16sub  0.263 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1742  MMXEXT - 8to16sub2 0.093 usec       crc=22368  MMXEXT - 8to16sub2 0.178 usec       crc32=0x99b6c4c7
1743   ---   ---
1744  3DNOW  - 8to16     0.192 usec       crc=28288  3DNOW  - 8to16     0.666 usec       crc32=0x115814bb
1745  3DNOW  - 16to8     0.367 usec       crc=28288  3DNOW  - 16to8     1.078 usec       crc32=0xee7ccbb4
1746  3DNOW  - 8to8      0.132 usec       crc=20352  3DNOW  - 8to8      0.665 usec       crc32=0xd37b3295
1747  3DNOW  - 16to8add  0.440 usec       crc=25536  3DNOW  - 16to8add  1.365 usec       crc32=0xdd817bf4
1748  3DNOW  - 8to16sub  0.557 usec       crc1=28064 crc2=16256  3DNOW  - 8to16sub  1.356 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1749  3DNOW  - 8to16sub2 0.691 usec       crc=22368  3DNOW  - 8to16sub2 2.098 usec       crc32=0x99b6c4c7
1750   ---   ---
1751  3DNOWE - 8to16     0.004 usec       crc=28288  3DNOWE - 8to16     -0.024 usec       crc32=0x115814bb
1752  3DNOWE - 16to8     0.019 usec       crc=28288  3DNOWE - 16to8     0.010 usec       crc32=0xee7ccbb4
1753  3DNOWE - 8to8      -0.294 usec       crc=20352  3DNOWE - 8to8      0.014 usec       crc32=0xd37b3295
1754  3DNOWE - 16to8add  0.028 usec       crc=25536  3DNOWE - 16to8add  0.016 usec       crc32=0xdd817bf4
1755  3DNOWE - 8to16sub  0.065 usec       crc1=28064 crc2=16256  3DNOWE - 8to16sub  -0.000 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1756  3DNOWE - 8to16sub2 0.027 usec       crc=22368  3DNOWE - 8to16sub2 -0.031 usec       crc32=0x99b6c4c7
1757   ---   ---
1758    
1759   =====  test quant =====   =====  test quant =====
1760  PLAINC -   quant_mpeg_intra 67.757 usec       crc=29809  PLAINC -   quant_mpeg_intra 98.631 usec       crc32=0xfd6a21a4
1761  PLAINC -   quant_mpeg_inter 68.482 usec       crc=12574  PLAINC -   quant_mpeg_inter 104.876 usec       crc32=0xf6de7757
1762  PLAINC - dequant_mpeg_intra 20.764 usec       crc=24052  PLAINC - dequant_mpeg_intra 50.285 usec       crc32=0x2def7bc7
1763  PLAINC - dequant_mpeg_inter 24.413 usec       crc=63847  PLAINC - dequant_mpeg_inter 58.316 usec       crc32=0xd878c722
1764  PLAINC -   quant_h263_intra 16.446 usec       crc=25662  PLAINC -   quant_h263_intra 33.803 usec       crc32=0x2eba9d43
1765  PLAINC -   quant_h263_inter 14.499 usec       crc=23972  PLAINC -   quant_h263_inter 45.411 usec       crc32=0xbd315a7e
1766  PLAINC - dequant_h263_intra 16.419 usec       crc=49900  PLAINC - dequant_h263_intra 39.302 usec       crc32=0x9841212a
1767  PLAINC - dequant_h263_inter 18.679 usec       crc=48899  PLAINC - dequant_h263_inter 44.124 usec       crc32=0xe7df8fba
1768   ---   ---
1769  MMX    -   quant_mpeg_intra 8.299 usec       crc=3459  MMX    -   quant_mpeg_intra 4.273 usec       crc32=0xdacabdb6 | ERROR
1770  *** CRC ERROR! ***  MMX    -   quant_mpeg_inter 3.576 usec       crc32=0x72883ab6 | ERROR
1771  MMX    -   quant_mpeg_inter 7.078 usec       crc=13247  MMX    - dequant_mpeg_intra 3.793 usec       crc32=0x2def7bc7
1772  *** CRC ERROR! ***  MMX    - dequant_mpeg_inter 4.808 usec       crc32=0xd878c722
1773  MMX    - dequant_mpeg_intra 3.455 usec       crc=24052  MMX    -   quant_h263_intra 2.881 usec       crc32=0x2eba9d43
1774  MMX    - dequant_mpeg_inter 4.483 usec       crc=63847  MMX    -   quant_h263_inter 2.550 usec       crc32=0xbd315a7e
1775  MMX    -   quant_h263_intra 2.597 usec       crc=25662  MMX    - dequant_h263_intra 2.974 usec       crc32=0x9841212a
1776  MMX    -   quant_h263_inter 2.151 usec       crc=23972  MMX    - dequant_h263_inter 2.906 usec       crc32=0xe7df8fba
1777  MMX    - dequant_h263_intra 2.684 usec       crc=49900   ---
1778  MMX    - dequant_h263_inter 2.647 usec       crc=48899  MMXEXT -   quant_mpeg_intra 4.221 usec       crc32=0xfd6a21a4
1779   ---  MMXEXT -   quant_mpeg_inter 4.339 usec       crc32=0xf6de7757
1780  MMXEXT -   quant_mpeg_intra 3.878 usec       crc=29809  MMXEXT - dequant_mpeg_intra 3.802 usec       crc32=0x2def7bc7
1781  MMXEXT -   quant_mpeg_inter 4.112 usec       crc=12574  MMXEXT - dequant_mpeg_inter 4.821 usec       crc32=0xd878c722
1782  MMXEXT - dequant_mpeg_intra 3.452 usec       crc=24052  MMXEXT -   quant_h263_intra 2.884 usec       crc32=0x2eba9d43
1783  MMXEXT - dequant_mpeg_inter 4.473 usec       crc=63847  MMXEXT -   quant_h263_inter 2.554 usec       crc32=0xbd315a7e
1784  MMXEXT -   quant_h263_intra 2.608 usec       crc=25662  MMXEXT - dequant_h263_intra 2.728 usec       crc32=0x9841212a
1785  MMXEXT -   quant_h263_inter 2.145 usec       crc=23972  MMXEXT - dequant_h263_inter 2.611 usec       crc32=0xe7df8fba
1786  MMXEXT - dequant_h263_intra 2.478 usec       crc=49900   ---
1787  MMXEXT - dequant_h263_inter 2.450 usec       crc=48899  3DNOW  -   quant_mpeg_intra 98.512 usec       crc32=0xfd6a21a4
1788   ---  3DNOW  -   quant_mpeg_inter 104.873 usec       crc32=0xf6de7757
1789  3DNOW  -   quant_mpeg_intra 66.051 usec       crc=29809  3DNOW  - dequant_mpeg_intra 50.219 usec       crc32=0x2def7bc7
1790  3DNOW  -   quant_mpeg_inter 73.494 usec       crc=12574  3DNOW  - dequant_mpeg_inter 58.254 usec       crc32=0xd878c722
1791  3DNOW  - dequant_mpeg_intra 20.374 usec       crc=24052  3DNOW  -   quant_h263_intra 33.778 usec       crc32=0x2eba9d43
1792  3DNOW  - dequant_mpeg_inter 23.645 usec       crc=63847  3DNOW  -   quant_h263_inter 41.998 usec       crc32=0xbd315a7e
1793  3DNOW  -   quant_h263_intra 16.292 usec       crc=25662  3DNOW  - dequant_h263_intra 39.344 usec       crc32=0x9841212a
1794  3DNOW  -   quant_h263_inter 14.322 usec       crc=23972  3DNOW  - dequant_h263_inter 43.607 usec       crc32=0xe7df8fba
1795  3DNOW  - dequant_h263_intra 16.613 usec       crc=49900   ---
1796  3DNOW  - dequant_h263_inter 18.382 usec       crc=48899  3DNOWE -   quant_mpeg_intra 98.490 usec       crc32=0xfd6a21a4
1797   ---  3DNOWE -   quant_mpeg_inter 104.889 usec       crc32=0xf6de7757
1798  3DNOWE -   quant_mpeg_intra 66.140 usec       crc=29809  3DNOWE - dequant_mpeg_intra 3.277 usec       crc32=0x2def7bc7
1799  3DNOWE -   quant_mpeg_inter 68.454 usec       crc=12574  3DNOWE - dequant_mpeg_inter 4.485 usec       crc32=0xd878c722
1800  3DNOWE - dequant_mpeg_intra 2.881 usec       crc=24052  3DNOWE -   quant_h263_intra 1.882 usec       crc32=0x2eba9d43
1801  3DNOWE - dequant_mpeg_inter 4.155 usec       crc=63847  3DNOWE -   quant_h263_inter 2.246 usec       crc32=0xbd315a7e
1802  3DNOWE -   quant_h263_intra 1.451 usec       crc=25662  3DNOWE - dequant_h263_intra 3.457 usec       crc32=0x9841212a
1803  3DNOWE -   quant_h263_inter 1.849 usec       crc=23972  3DNOWE - dequant_h263_inter 3.275 usec       crc32=0xe7df8fba
 3DNOWE - dequant_h263_intra 2.101 usec       crc=49900  
 3DNOWE - dequant_h263_inter 2.109 usec       crc=48899  
1804   ---   ---
1805    
1806   =====  test cbp =====   =====  test cbp =====
1807  PLAINC -   calc_cbp#1 0.090 usec       cbp=0x15  PLAINC -   calc_cbp#1 0.168 usec       cbp=0x15
1808  PLAINC -   calc_cbp#2 0.086 usec       cbp=0x38  PLAINC -   calc_cbp#2 0.168 usec       cbp=0x38
1809  PLAINC -   calc_cbp#3 0.087 usec       cbp=0xf  PLAINC -   calc_cbp#3 0.157 usec       cbp=0x0f
1810  PLAINC -   calc_cbp#4 0.114 usec       cbp=0x5  PLAINC -   calc_cbp#4 0.235 usec       cbp=0x05
1811   ---   ---
1812  MMX    -   calc_cbp#1 0.061 usec       cbp=0x15  MMX    -   calc_cbp#1 0.070 usec       cbp=0x15
1813  MMX    -   calc_cbp#2 0.063 usec       cbp=0x38  MMX    -   calc_cbp#2 0.062 usec       cbp=0x38
1814  MMX    -   calc_cbp#3 0.061 usec       cbp=0xf  MMX    -   calc_cbp#3 0.062 usec       cbp=0x0f
1815  MMX    -   calc_cbp#4 0.060 usec       cbp=0x5  MMX    -   calc_cbp#4 0.061 usec       cbp=0x05
1816   ---   ---
1817  MMXEXT -   calc_cbp#1 0.062 usec       cbp=0x15  MMXEXT -   calc_cbp#1 0.062 usec       cbp=0x15
1818  MMXEXT -   calc_cbp#2 0.060 usec       cbp=0x38  MMXEXT -   calc_cbp#2 0.061 usec       cbp=0x38
1819  MMXEXT -   calc_cbp#3 0.062 usec       cbp=0xf  MMXEXT -   calc_cbp#3 0.061 usec       cbp=0x0f
1820  MMXEXT -   calc_cbp#4 0.061 usec       cbp=0x5  MMXEXT -   calc_cbp#4 0.061 usec       cbp=0x05
1821   ---   ---
1822  3DNOW  -   calc_cbp#1 0.089 usec       cbp=0x15  3DNOW  -   calc_cbp#1 0.168 usec       cbp=0x15
1823  3DNOW  -   calc_cbp#2 0.087 usec       cbp=0x38  3DNOW  -   calc_cbp#2 0.168 usec       cbp=0x38
1824  3DNOW  -   calc_cbp#3 0.087 usec       cbp=0xf  3DNOW  -   calc_cbp#3 0.157 usec       cbp=0x0f
1825  3DNOW  -   calc_cbp#4 0.116 usec       cbp=0x5  3DNOW  -   calc_cbp#4 0.238 usec       cbp=0x05
1826   ---   ---
1827  3DNOWE -   calc_cbp#1 0.050 usec       cbp=0x15  3DNOWE -   calc_cbp#1 0.049 usec       cbp=0x15
1828  3DNOWE -   calc_cbp#2 0.051 usec       cbp=0x38  3DNOWE -   calc_cbp#2 0.049 usec       cbp=0x38
1829  3DNOWE -   calc_cbp#3 0.050 usec       cbp=0xf  3DNOWE -   calc_cbp#3 0.049 usec       cbp=0x0f
1830  3DNOWE -   calc_cbp#4 0.049 usec       cbp=0x5  3DNOWE -   calc_cbp#4 0.049 usec       cbp=0x05
1831   ---   ---
1832    
1833  */  
1834    NB: If a function isn't optimised for a specific set of intructions,
1835        a C function is used instead. So don't panic if some functions
1836        may appear to be slow.
1837    
1838    NB: MMX mpeg4 quantization is known to have very small errors (+/-1 magnitude)
1839        for 1 or 2 coefficients a block. This is mainly caused by the fact the unit
1840        test goes far behind the usual limits of real encoding. Please do not report
1841        this error to the developers
1842    
1843    *********************************************************************/

Legend:
Removed from v.1.9.2.8  
changed lines
  Added in v.1.14

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4