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

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

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