[svn] / branches / dev-api-4 / xvidcore / examples / xvid_bench.c Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/examples/xvid_bench.c

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

revision 1060, Tue Jun 10 09:14:48 2003 UTC revision 1261, Sat Dec 13 00:04:09 2003 UTC
# Line 19  Line 19 
19   *  along with this program; if not, write to the Free Software   *  along with this program; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: xvid_bench.c,v 1.9.2.3 2003-06-10 09:14:48 edgomez Exp $   * $Id: xvid_bench.c,v 1.9.2.10 2003-12-13 00:04:08 edgomez Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 54  Line 54 
54  #include "image/colorspace.h"  #include "image/colorspace.h"
55  #include "image/interpolate8x8.h"  #include "image/interpolate8x8.h"
56  #include "utils/mem_transfer.h"  #include "utils/mem_transfer.h"
57  #include "quant/quant_h263.h"  #include "quant/quant.h"
 #include "quant/quant_mpeg4.h"  
58  #include "motion/sad.h"  #include "motion/sad.h"
59  #include "utils/emms.h"  #include "utils/emms.h"
60  #include "utils/timer.h"  #include "utils/timer.h"
# Line 115  Line 114 
114    
115  CPU cpu_list[] =  CPU cpu_list[] =
116  { { "PLAINC", 0 }  { { "PLAINC", 0 }
117    #ifdef ARCH_IS_IA32
118    , { "MMX   ", XVID_CPU_MMX }    , { "MMX   ", XVID_CPU_MMX }
119    , { "MMXEXT", XVID_CPU_MMXEXT | XVID_CPU_MMX }    , { "MMXEXT", XVID_CPU_MMXEXT | XVID_CPU_MMX }
120    , { "SSE2  ", XVID_CPU_SSE2 | XVID_CPU_MMX }    , { "SSE2  ", XVID_CPU_SSE2 | XVID_CPU_MMX }
121    , { "3DNOW ", XVID_CPU_3DNOW }    , { "3DNOW ", XVID_CPU_3DNOW }
122    , { "3DNOWE", XVID_CPU_3DNOWEXT }    , { "3DNOWE", XVID_CPU_3DNOW | XVID_CPU_3DNOWEXT }
123    #endif
124  //, { "IA64  ", XVID_CPU_IA64 }  //, { "IA64  ", XVID_CPU_IA64 }
125  //, { "TSC   ", XVID_CPU_TSC }  //, { "TSC   ", XVID_CPU_TSC }
126    , { 0, 0 } };    , { 0, 0 } };
127    
128  CPU  cpu_short_list[] =  CPU  cpu_short_list[] =
129  { { "PLAINC", 0 }  { { "PLAINC", 0 }
130    #ifdef ARCH_IS_IA32
131    , { "MMX   ", XVID_CPU_MMX }    , { "MMX   ", XVID_CPU_MMX }
132  //, { "MMXEXT", XVID_CPU_MMXEXT | XVID_CPU_MMX }  //, { "MMXEXT", XVID_CPU_MMXEXT | XVID_CPU_MMX }
133    #endif
134  //, { "IA64  ", XVID_CPU_IA64 }  //, { "IA64  ", XVID_CPU_IA64 }
135    , { 0, 0 } };    , { 0, 0 } };
136    
137  CPU cpu_short_list2[] =  CPU cpu_short_list2[] =
138  { { "PLAINC", 0 }  { { "PLAINC", 0 }
139    #ifdef ARCH_IS_IA32
140    , { "MMX   ", XVID_CPU_MMX }    , { "MMX   ", XVID_CPU_MMX }
141    , { "SSE2  ", XVID_CPU_SSE2 | XVID_CPU_MMX }    , { "SSE2  ", XVID_CPU_SSE2 | XVID_CPU_MMX }
142    #endif
143    , { 0, 0 } };    , { 0, 0 } };
144    
145    
146  int init_cpu(CPU *cpu)  int init_cpu(CPU *cpu)
147  {  {
148          int xerr, cpu_type;          xvid_gbl_info_t xinfo;
149          xvid_gbl_init_t xinit;  
150            /* Get the available CPU flags */
151            memset(&xinfo, 0, sizeof(xinfo));
152            xinfo.version = XVID_VERSION;
153            xvid_global(NULL, XVID_GBL_INFO, &xinfo, NULL);
154    
155          cpu_type = check_cpu_features() & cpu->cpu;          /* Are we trying to test a subset of the host CPU features */
156            if ((xinfo.cpu_flags & cpu->cpu) == cpu->cpu) {
157                    int xerr;
158                    xvid_gbl_init_t xinit;
159          memset(&xinit, 0, sizeof(xinit));          memset(&xinit, 0, sizeof(xinit));
160          xinit.cpu_flags = cpu_type | XVID_CPU_FORCE;                  xinit.cpu_flags = cpu->cpu | XVID_CPU_FORCE;
161          xinit.version = XVID_VERSION;          xinit.version = XVID_VERSION;
162          xerr = xvid_global(NULL, 0, &xinit, NULL);                  xerr = xvid_global(NULL, XVID_GBL_INIT, &xinit, NULL);
163          if (cpu->cpu>0 && (cpu_type==0 || xerr==XVID_ERR_FAIL)) {                  if (xerr==XVID_ERR_FAIL) {
164                  printf( "%s - skipped...\n", cpu->name );                          /* libxvidcore failed to init */
165                  return 0;                  return 0;
166          }          }
167            } else {
168                    /* The host CPU doesn't support some required feature for this test */
169                    return(0);
170            }
171          return 1;          return 1;
172  }  }
173    
174    #define CRC32_REMAINDER 0xCBF43926
175    #define CRC32_INITIAL 0xffffffff
176    
177    #define DO1(c, crc) ((crc) = crc32tab[((unsigned int)((crc)>>24) ^ (*c++)) & 0xff] ^ ((crc) << 8))
178    #define DO2(c, crc)  DO1(c, crc); DO1(c, crc);
179    #define DO4(c, crc)  DO2(c, crc); DO2(c, crc);
180    #define DO8(c, crc)  DO4(c, crc); DO4(c, crc);
181    
182    /******************************************************************************
183    * Precomputed AAL5 CRC32 lookup table
184    ******************************************************************************/
185    
186    static unsigned long crc32tab[256] = {
187    
188            0x00000000L, 0x04C11DB7L, 0x09823B6EL, 0x0D4326D9L,
189            0x130476DCL, 0x17C56B6BL, 0x1A864DB2L, 0x1E475005L,
190            0x2608EDB8L, 0x22C9F00FL, 0x2F8AD6D6L, 0x2B4BCB61L,
191            0x350C9B64L, 0x31CD86D3L, 0x3C8EA00AL, 0x384FBDBDL,
192            0x4C11DB70L, 0x48D0C6C7L, 0x4593E01EL, 0x4152FDA9L,
193            0x5F15ADACL, 0x5BD4B01BL, 0x569796C2L, 0x52568B75L,
194            0x6A1936C8L, 0x6ED82B7FL, 0x639B0DA6L, 0x675A1011L,
195            0x791D4014L, 0x7DDC5DA3L, 0x709F7B7AL, 0x745E66CDL,
196            0x9823B6E0L, 0x9CE2AB57L, 0x91A18D8EL, 0x95609039L,
197            0x8B27C03CL, 0x8FE6DD8BL, 0x82A5FB52L, 0x8664E6E5L,
198            0xBE2B5B58L, 0xBAEA46EFL, 0xB7A96036L, 0xB3687D81L,
199            0xAD2F2D84L, 0xA9EE3033L, 0xA4AD16EAL, 0xA06C0B5DL,
200            0xD4326D90L, 0xD0F37027L, 0xDDB056FEL, 0xD9714B49L,
201            0xC7361B4CL, 0xC3F706FBL, 0xCEB42022L, 0xCA753D95L,
202            0xF23A8028L, 0xF6FB9D9FL, 0xFBB8BB46L, 0xFF79A6F1L,
203            0xE13EF6F4L, 0xE5FFEB43L, 0xE8BCCD9AL, 0xEC7DD02DL,
204            0x34867077L, 0x30476DC0L, 0x3D044B19L, 0x39C556AEL,
205            0x278206ABL, 0x23431B1CL, 0x2E003DC5L, 0x2AC12072L,
206            0x128E9DCFL, 0x164F8078L, 0x1B0CA6A1L, 0x1FCDBB16L,
207            0x018AEB13L, 0x054BF6A4L, 0x0808D07DL, 0x0CC9CDCAL,
208            0x7897AB07L, 0x7C56B6B0L, 0x71159069L, 0x75D48DDEL,
209            0x6B93DDDBL, 0x6F52C06CL, 0x6211E6B5L, 0x66D0FB02L,
210            0x5E9F46BFL, 0x5A5E5B08L, 0x571D7DD1L, 0x53DC6066L,
211            0x4D9B3063L, 0x495A2DD4L, 0x44190B0DL, 0x40D816BAL,
212            0xACA5C697L, 0xA864DB20L, 0xA527FDF9L, 0xA1E6E04EL,
213            0xBFA1B04BL, 0xBB60ADFCL, 0xB6238B25L, 0xB2E29692L,
214            0x8AAD2B2FL, 0x8E6C3698L, 0x832F1041L, 0x87EE0DF6L,
215            0x99A95DF3L, 0x9D684044L, 0x902B669DL, 0x94EA7B2AL,
216            0xE0B41DE7L, 0xE4750050L, 0xE9362689L, 0xEDF73B3EL,
217            0xF3B06B3BL, 0xF771768CL, 0xFA325055L, 0xFEF34DE2L,
218            0xC6BCF05FL, 0xC27DEDE8L, 0xCF3ECB31L, 0xCBFFD686L,
219            0xD5B88683L, 0xD1799B34L, 0xDC3ABDEDL, 0xD8FBA05AL,
220            0x690CE0EEL, 0x6DCDFD59L, 0x608EDB80L, 0x644FC637L,
221            0x7A089632L, 0x7EC98B85L, 0x738AAD5CL, 0x774BB0EBL,
222            0x4F040D56L, 0x4BC510E1L, 0x46863638L, 0x42472B8FL,
223            0x5C007B8AL, 0x58C1663DL, 0x558240E4L, 0x51435D53L,
224            0x251D3B9EL, 0x21DC2629L, 0x2C9F00F0L, 0x285E1D47L,
225            0x36194D42L, 0x32D850F5L, 0x3F9B762CL, 0x3B5A6B9BL,
226            0x0315D626L, 0x07D4CB91L, 0x0A97ED48L, 0x0E56F0FFL,
227            0x1011A0FAL, 0x14D0BD4DL, 0x19939B94L, 0x1D528623L,
228            0xF12F560EL, 0xF5EE4BB9L, 0xF8AD6D60L, 0xFC6C70D7L,
229            0xE22B20D2L, 0xE6EA3D65L, 0xEBA91BBCL, 0xEF68060BL,
230            0xD727BBB6L, 0xD3E6A601L, 0xDEA580D8L, 0xDA649D6FL,
231            0xC423CD6AL, 0xC0E2D0DDL, 0xCDA1F604L, 0xC960EBB3L,
232            0xBD3E8D7EL, 0xB9FF90C9L, 0xB4BCB610L, 0xB07DABA7L,
233            0xAE3AFBA2L, 0xAAFBE615L, 0xA7B8C0CCL, 0xA379DD7BL,
234            0x9B3660C6L, 0x9FF77D71L, 0x92B45BA8L, 0x9675461FL,
235            0x8832161AL, 0x8CF30BADL, 0x81B02D74L, 0x857130C3L,
236            0x5D8A9099L, 0x594B8D2EL, 0x5408ABF7L, 0x50C9B640L,
237            0x4E8EE645L, 0x4A4FFBF2L, 0x470CDD2BL, 0x43CDC09CL,
238            0x7B827D21L, 0x7F436096L, 0x7200464FL, 0x76C15BF8L,
239            0x68860BFDL, 0x6C47164AL, 0x61043093L, 0x65C52D24L,
240            0x119B4BE9L, 0x155A565EL, 0x18197087L, 0x1CD86D30L,
241            0x029F3D35L, 0x065E2082L, 0x0B1D065BL, 0x0FDC1BECL,
242            0x3793A651L, 0x3352BBE6L, 0x3E119D3FL, 0x3AD08088L,
243            0x2497D08DL, 0x2056CD3AL, 0x2D15EBE3L, 0x29D4F654L,
244            0xC5A92679L, 0xC1683BCEL, 0xCC2B1D17L, 0xC8EA00A0L,
245            0xD6AD50A5L, 0xD26C4D12L, 0xDF2F6BCBL, 0xDBEE767CL,
246            0xE3A1CBC1L, 0xE760D676L, 0xEA23F0AFL, 0xEEE2ED18L,
247            0xF0A5BD1DL, 0xF464A0AAL, 0xF9278673L, 0xFDE69BC4L,
248            0x89B8FD09L, 0x8D79E0BEL, 0x803AC667L, 0x84FBDBD0L,
249            0x9ABC8BD5L, 0x9E7D9662L, 0x933EB0BBL, 0x97FFAD0CL,
250            0xAFB010B1L, 0xAB710D06L, 0xA6322BDFL, 0xA2F33668L,
251            0xBCB4666DL, 0xB8757BDAL, 0xB5365D03L, 0xB1F740B4L
252    
253    };
254    
255    uint32_t
256    calc_crc(uint8_t *mem, int len, uint32_t initial)
257    {
258    
259            register unsigned int crc;
260    
261            crc = initial;
262    
263            while( len >= 8) {
264                    DO8(mem, crc);
265                    len -= 8;
266            }
267    
268            while( len ) {
269                    DO1(mem, crc);
270                    len--;
271            }
272    
273            return(crc);
274    
275    }
276    
277  /*********************************************************************  /*********************************************************************
278   * test DCT   * test DCT
279   *********************************************************************/   *********************************************************************/
# Line 167  Line 286 
286          int tst;          int tst;
287          CPU *cpu;          CPU *cpu;
288          int i;          int i;
289          short iDst0[8*8], iDst[8*8], fDst[8*8];          DECLARE_ALIGNED_MATRIX(iDst0, 8, 8, short, 16);
290            DECLARE_ALIGNED_MATRIX(iDst,  8, 8, short, 16);
291            DECLARE_ALIGNED_MATRIX(fDst,  8, 8, short, 16);
292          double overhead;          double overhead;
293    
294          printf( "\n ===== test fdct/idct =====\n" );          printf( "\n ===== test fdct/idct =====\n" );
# Line 205  Line 326 
326                          MSE += delta*delta;                          MSE += delta*delta;
327                  }                  }
328                  PSNR = (MSE==0.) ? 1.e6 : -4.3429448*log( MSE/64. );                  PSNR = (MSE==0.) ? 1.e6 : -4.3429448*log( MSE/64. );
329                  printf( "%s -  %.3f usec       PSNR=%.3f  MSE=%.3f\n",                  printf( "%s -  %.3f usec       PSNR=%.3f  MSE=%.3f %s\n",
330                                  cpu->name, t, PSNR, MSE );                                  cpu->name, t, PSNR, MSE,
331                  if (ABS(MSE)>=64) printf( "*** CRC ERROR! ***\n" );                                  (ABS(MSE)>=64)? "| ERROR" :"");
332          }          }
333  }  }
334    
# Line 221  Line 342 
342          int tst;          int tst;
343          CPU *cpu;          CPU *cpu;
344          int i;          int i;
345          uint8_t Cur[16*16], Ref1[16*16], Ref2[16*16];          DECLARE_ALIGNED_MATRIX(Cur,  16, 16, uint8_t, 16);
346            DECLARE_ALIGNED_MATRIX(Ref1, 16, 16, uint8_t, 16);
347            DECLARE_ALIGNED_MATRIX(Ref2, 16, 16, uint8_t, 16);
348    
349          printf( "\n ======  test SAD ======\n" );          printf( "\n ======  test SAD ======\n" );
350          for(i=0; i<16*16;++i) {          for(i=0; i<16*16;++i) {
# Line 242  Line 365 
365                  for(tst=0; tst<nb_tests; ++tst) s = sad8(Cur, Ref1, 16);                  for(tst=0; tst<nb_tests; ++tst) s = sad8(Cur, Ref1, 16);
366                  emms();                  emms();
367                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
368                  printf( "%s - sad8    %.3f usec       sad=%d\n", cpu->name, t, s );                  printf("%s - sad8    %.3f usec       sad=%d %s\n",
369                  if (s!=3776) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
370                               (s!=3776)?"| ERROR": "" );
371    
372                  t = gettime_usec();                  t = gettime_usec();
373                  emms();                  emms();
374                  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);
375                  emms();                  emms();
376                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
377                  printf( "%s - sad16   %.3f usec       sad=%d\n", cpu->name, t, s );                  printf("%s - sad16   %.3f usec       sad=%d %s\n",
378                  if (s!=27214) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
379                               (s!=27214)?"| ERROR": "" );
380    
381                  t = gettime_usec();                  t = gettime_usec();
382                  emms();                  emms();
383                  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);
384                  emms();                  emms();
385                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
386                  printf( "%s - sad16bi %.3f usec       sad=%d\n", cpu->name, t, s );                  printf( "%s - sad16bi %.3f usec       sad=%d %s\n",
387                  if (s!=26274) printf( "*** CRC ERROR! ***\n" );                                  cpu->name, t, s,
388                                    (s!=26274)?"| ERROR": "" );
389    
390                  t = gettime_usec();                  t = gettime_usec();
391                  emms();                  emms();
392                  for(tst=0; tst<nb_tests; ++tst) s = dev16(Cur, 16);                  for(tst=0; tst<nb_tests; ++tst) s = dev16(Cur, 16);
393                  emms();                  emms();
394                  t = (gettime_usec() - t) / nb_tests;                  t = (gettime_usec() - t) / nb_tests;
395                  printf( "%s - dev16   %.3f usec       sad=%d\n", cpu->name, t, s );                  printf( "%s - dev16   %.3f usec       sad=%d %s\n",
396                  if (s!=3344) printf( "*** CRC ERROR! ***\n" );                                  cpu->name, t, s,
397                                    (s!=3344)?"| ERROR": "" );
398    
399                  printf( " --- \n" );                  printf( " --- \n" );
400          }          }
# Line 285  Line 412 
412  #define LEAVE \  #define LEAVE \
413  emms();                             \  emms();                             \
414  t = (gettime_usec() - t) / nb_tests;  \  t = (gettime_usec() - t) / nb_tests;  \
415  iCrc = 0;                           \          iCrc = calc_crc((uint8_t*)Dst, sizeof(Dst), CRC32_INITIAL)
 for(i=0; i<16*8; ++i) { iCrc += Dst[i]^i; }  
416    
417  #define TEST_MB(FUNC, R)                \  #define TEST_MB(FUNC, R)                \
418  ENTER                               \  ENTER                               \
# Line 305  Line 431 
431          CPU *cpu;          CPU *cpu;
432          const uint8_t Src0[16*9] = {          const uint8_t Src0[16*9] = {
433                  /* try to have every possible combinaison of rounding... */                  /* try to have every possible combinaison of rounding... */
434                  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,
435                  , 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,
436                  , 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,
437                  , 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,
438                  , 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,
439                  , 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,
440                  , 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,
441                  , 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,
442                  , 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
443          };          };
444          uint8_t Dst[16*8] = {0};          uint8_t Dst[16*8] = {0};
445    
# Line 328  Line 454 
454                          continue;                          continue;
455    
456                  TEST_MB(interpolate8x8_halfpel_h, 0);                  TEST_MB(interpolate8x8_halfpel_h, 0);
457                  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",
458                  if (iCrc!=8107) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
459                               (iCrc!=0x115381ba)?"| ERROR": "" );
460    
461                  TEST_MB(interpolate8x8_halfpel_h, 1);                  TEST_MB(interpolate8x8_halfpel_h, 1);
462                  printf( "%s -           round1 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s -           round1 %.3f usec       crc32=0x%08x %s\n",
463                  if (iCrc!=8100) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
464                               (iCrc!=0x2b1f528f)?"| ERROR": "" );
465    
466    
467                  TEST_MB(interpolate8x8_halfpel_v, 0);                  TEST_MB(interpolate8x8_halfpel_v, 0);
468                  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",
469                  if (iCrc!=8108) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
470                               (iCrc!=0x423cdcc7)?"| ERROR": "" );
471    
472                  TEST_MB(interpolate8x8_halfpel_v, 1);                  TEST_MB(interpolate8x8_halfpel_v, 1);
473                  printf( "%s -           round1 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s -           round1 %.3f usec       crc32=0x%08x %s\n",
474                  if (iCrc!=8105) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
475                               (iCrc!=0x42202efe)?"| ERROR": "" );
476    
477    
478                  TEST_MB(interpolate8x8_halfpel_hv, 0);                  TEST_MB(interpolate8x8_halfpel_hv, 0);
479                  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",
480                  if (iCrc!=8112) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
481                               (iCrc!=0xd198d387)?"| ERROR": "" );
482    
483                  TEST_MB(interpolate8x8_halfpel_hv, 1);                  TEST_MB(interpolate8x8_halfpel_hv, 1);
484                  printf( "%s -           round1 %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s -           round1 %.3f usec       crc32=0x%08x %s\n",
485                  if (iCrc!=8103) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
486                               (iCrc!=0x9ecfd921)?"| ERROR": "" );
487    
488    
489                  /* this is a new function, as of 06.06.2002 */                  /* this is a new function, as of 06.06.2002 */
490  #if 0  #if 0
491                  TEST_MB2(interpolate8x8_avrg);                  TEST_MB2(interpolate8x8_avrg);
492                  printf( "%s - interpolate8x8_c %.3f usec       iCrc=%d\n", cpu->name, t, iCrc );                  printf("%s - interpolate8x8_c %.3f usec       crc32=0x%08x %s\n",
493                  if (iCrc!=8107) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, iCrc,
494                               (iCrc!=8107)?"| ERROR": "" );
495  #endif  #endif
496    
497                  printf( " --- \n" );                  printf( " --- \n" );
# Line 394  Line 527 
527  }                                         \  }                                         \
528  emms();                                   \  emms();                                   \
529  t = (gettime_usec()-t -overhead) / nb_tests;\  t = (gettime_usec()-t -overhead) / nb_tests;\
530  s = 0; for(i=0; i<8*32; ++i) { s += (DST)[i]^i; }  s = calc_crc((uint8_t*)(DST), sizeof((DST)), CRC32_INITIAL)
531    
532  #define TEST_TRANSFER(FUNC, DST, SRC)         \  #define TEST_TRANSFER(FUNC, DST, SRC)         \
533  TEST_TRANSFER_BEGIN(DST);                 \  TEST_TRANSFER_BEGIN(DST);                 \
# Line 420  Line 553 
553  }                                         \  }                                         \
554  emms();                                   \  emms();                                   \
555  t = (gettime_usec()-t -overhead) / nb_tests;\  t = (gettime_usec()-t -overhead) / nb_tests;\
556  s = 0; for(i=0; i<8*32; ++i) { s += (DST)[i]; }  s = calc_crc((uint8_t*)(DST), sizeof((DST)), CRC32_INITIAL)
557    
558  #define TEST_TRANSFER2(FUNC, DST, SRC, R1)    \  #define TEST_TRANSFER2(FUNC, DST, SRC, R1)    \
559  TEST_TRANSFER2_BEGIN(DST,SRC);            \  TEST_TRANSFER2_BEGIN(DST,SRC);            \
# Line 442  Line 575 
575    
576          printf( "\n ===  test transfer ===\n" );          printf( "\n ===  test transfer ===\n" );
577    
578          for(cpu = cpu_short_list; cpu->name!=0; ++cpu)          for(cpu = cpu_list; cpu->name!=0; ++cpu)
579          {          {
580                  double t, overhead;                  double t, overhead;
581                  int tst, s;                  int tst, s;
# Line 451  Line 584 
584                          continue;                          continue;
585    
586                  TEST_TRANSFER(transfer_8to16copy, Dst16, Src8);                  TEST_TRANSFER(transfer_8to16copy, Dst16, Src8);
587                  printf( "%s - 8to16     %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 8to16     %.3f usec       crc32=0x%08x %s\n",
588                  if (s!=28288) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
589                               (s!=0x115814bb)?"| ERROR": "");
590    
591                  TEST_TRANSFER(transfer_16to8copy, Dst8, Src16);                  TEST_TRANSFER(transfer_16to8copy, Dst8, Src16);
592                  printf( "%s - 16to8     %.3f usec       crc=%d\n", cpu->name, t, s );                  printf( "%s - 16to8     %.3f usec       crc32=0x%08x %s\n",
593                  if (s!=28288) printf( "*** CRC ERROR! ***\n" );                                  cpu->name, t, s,
594                                    (s!=0xee7ccbb4)?"| ERROR": "");
595    
596                  TEST_TRANSFER(transfer8x8_copy, Dst8, Src8);                  TEST_TRANSFER(transfer8x8_copy, Dst8, Src8);
597                  printf( "%s - 8to8      %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 8to8      %.3f usec       crc32=0x%08x %s\n",
598                  if (s!=20352) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
599                               (s!=0xd37b3295)?"| ERROR": "");
600    
601                  TEST_TRANSFER(transfer_16to8add, Dst8, Src16);                  TEST_TRANSFER(transfer_16to8add, Dst8, Src16);
602                  printf( "%s - 16to8add  %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 16to8add  %.3f usec       crc32=0x%08x %s\n",
603                  if (s!=25536) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
604                               (s!=0xdd817bf4)?"| ERROR": "" );
605    
606                  TEST_TRANSFER2(transfer_8to16sub, Dst16, Src8, Ref1);                  TEST_TRANSFER2(transfer_8to16sub, Dst16, Src8, Ref1);
607                  printf( "%s - 8to16sub  %.3f usec       crc1=%d ", cpu->name, t, s );                  {
608                  if (s!=28064) printf( "*** CRC ERROR! ***\n" );                          int s1, s2;
609                  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);
610                  printf( "crc2=%d\n", s);                          s2 = calc_crc((uint8_t*)Src8, sizeof(Src8), CRC32_INITIAL);
611                  if (s!=16256) printf( "*** CRC ERROR! ***\n" );                          printf("%s - 8to16sub  %.3f usec       crc32(1)=0x%08x crc32(2)=0x%08x %s %s\n",
612  #if 1                                     cpu->name, t, s1, s2,
613                                       (s1!=0xa1e07163)?"| ERROR1": "",
614                                       (s2!=0xd86c5d23)?"| ERROR2": "" );
615                    }
616    
617                  TEST_TRANSFER3(transfer_8to16sub2, Dst16, Src8, Ref1, Ref2);                  TEST_TRANSFER3(transfer_8to16sub2, Dst16, Src8, Ref1, Ref2);
618                  printf( "%s - 8to16sub2 %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - 8to16sub2 %.3f usec       crc32=0x%08x %s\n",
619                  if (s!=20384) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
620  //    for(i=0; i<64; ++i) printf( "[%d]", Dst16[i]);                             (s!=0x99b6c4c7)?"| ERROR": "" );
621  //    printf("\n");  
 #endif  
622                  printf( " --- \n" );                  printf( " --- \n" );
623          }          }
624  }  }
# Line 489  Line 629 
629    
630  #define TEST_QUANT(FUNC, DST, SRC)              \  #define TEST_QUANT(FUNC, DST, SRC)              \
631  t = gettime_usec();                         \  t = gettime_usec();                         \
632  for(s=0,qm=1; qm<=255; ++qm) {              \  for(s=CRC32_INITIAL,qm=1; qm<=255; ++qm) {              \
633    for(i=0; i<8*8; ++i) Quant[i] = qm;       \    for(i=0; i<8*8; ++i) Quant[i] = qm;       \
634    set_inter_matrix( Quant );                \    set_inter_matrix( mpeg_quant_matrices, Quant );                \
635    emms();                                   \    emms();                                   \
636    for(q=1; q<=max_Q; ++q) {                 \    for(q=1; q<=max_Q; ++q) {                 \
637          for(tst=0; tst<nb_tests; ++tst)         \          for(tst=0; tst<nb_tests; ++tst)         \
638            (FUNC)((DST), (SRC), q);              \            (FUNC)((DST), (SRC), q, mpeg_quant_matrices);              \
639          for(i=0; i<64; ++i) s+=(DST)[i]^i^qm;   \          s = calc_crc((uint8_t*)(DST), 64*sizeof(int16_t), s); \
640    }                                         \    }                                         \
641    emms();                                   \    emms();                                   \
642  }                                           \  }                                           \
643  t = (gettime_usec()-t-overhead)/nb_tests/qm;\  t = (gettime_usec()-t-overhead)/nb_tests/qm
 s = (s&0xffff)^(s>>16)  
644    
645  #define TEST_QUANT2(FUNC, DST, SRC)             \  #define TEST_QUANT2(FUNC, DST, SRC)             \
646  t = gettime_usec();                         \  t = gettime_usec();                         \
647  for(s=0,qm=1; qm<=255; ++qm) {              \  for(s=CRC32_INITIAL,qm=1; qm<=255; ++qm) {              \
648    for(i=0; i<8*8; ++i) Quant[i] = qm;       \    for(i=0; i<8*8; ++i) Quant[i] = qm;       \
649    set_intra_matrix( Quant );                \    set_intra_matrix( mpeg_quant_matrices, Quant );                \
650    emms();                                   \    emms();                                   \
651    for(q=1; q<=max_Q; ++q) {                 \    for(q=1; q<=max_Q; ++q) {                 \
652          for(tst=0; tst<nb_tests; ++tst)         \          for(tst=0; tst<nb_tests; ++tst)         \
653            (FUNC)((DST), (SRC), q, q);           \            (FUNC)((DST), (SRC), q, q, mpeg_quant_matrices);           \
654          for(i=0; i<64; ++i) s+=(DST)[i]^i^qm;   \          s = calc_crc((uint8_t*)(DST), 64*sizeof(int16_t), s); \
655    }                                         \    }                                         \
656    emms();                                   \    emms();                                   \
657  }                                           \  }                                           \
658  t = (gettime_usec()-t-overhead)/nb_tests/qm;\  t = (gettime_usec()-t-overhead)/nb_tests/qm
 s = (s&0xffff)^(s>>16)  
659    
660  void test_quant()  void test_quant()
661  {  {
662          const int nb_tests = 1*speed_ref;          const int nb_tests = 1*speed_ref;
663          const int max_Q = 31;          const int max_Q = 31;
664            DECLARE_ALIGNED_MATRIX(mpeg_quant_matrices, 8, 64, uint16_t, 16);
665    
666          int i, qm;          int i, qm;
667          CPU *cpu;          CPU *cpu;
668          int16_t  Src[8*8], Dst[8*8];          DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16);
669            DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16);
670          uint8_t Quant[8*8];          uint8_t Quant[8*8];
671    
672          printf( "\n =====  test quant =====\n" );          printf( "\n =====  test quant =====\n" );
# Line 537  Line 678 
678                  Dst[i] = 0;                  Dst[i] = 0;
679          }          }
680    
681          for(cpu = cpu_short_list; cpu->name!=0; ++cpu)          for(cpu = cpu_list; cpu->name!=0; ++cpu)
682          {          {
683                  double t, overhead;                  double t, overhead;
684                  int tst, q;                  int tst, q;
# Line 549  Line 690 
690                  overhead = -gettime_usec();                  overhead = -gettime_usec();
691                  for(s=0,qm=1; qm<=255; ++qm) {                  for(s=0,qm=1; qm<=255; ++qm) {
692                          for(i=0; i<8*8; ++i) Quant[i] = qm;                          for(i=0; i<8*8; ++i) Quant[i] = qm;
693                          set_inter_matrix( Quant );                          set_inter_matrix(mpeg_quant_matrices, Quant );
694                          for(q=1; q<=max_Q; ++q)                          for(q=1; q<=max_Q; ++q)
695                                  for(i=0; i<64; ++i) s+=Dst[i]^i^qm;                                  for(i=0; i<64; ++i) s+=Dst[i]^i^qm;
696                  }                  }
697                  overhead += gettime_usec();                  overhead += gettime_usec();
698    
699  #if 1                  TEST_QUANT2(quant_mpeg_intra, Dst, Src);
700                  TEST_QUANT2(quant4_intra, Dst, Src);                  printf("%s -   quant_mpeg_intra %.3f usec       crc32=0x%08x %s\n",
701                  printf( "%s -   quant4_intra %.3f usec       crc=%d\n", cpu->name, t, s );                             cpu->name, t, s,
702                  if (s!=29809) printf( "*** CRC ERROR! ***\n" );                             (s!=0xfd6a21a4)? "| ERROR": "");
703    
704                  TEST_QUANT(quant4_inter, Dst, Src);                  TEST_QUANT(quant_mpeg_inter, Dst, Src);
705                  printf( "%s -   quant4_inter %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s -   quant_mpeg_inter %.3f usec       crc32=0x%08x %s\n",
706                  if (s!=12574) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
707  #endif                             (s!=0xf6de7757)?"| ERROR": "");
708  #if 1  
709                  TEST_QUANT2(dequant4_intra, Dst, Src);                  TEST_QUANT2(dequant_mpeg_intra, Dst, Src);
710                  printf( "%s - dequant4_intra %.3f usec       crc=%d\n", cpu->name, t, s );                  printf("%s - dequant_mpeg_intra %.3f usec       crc32=0x%08x %s\n",
711                  if (s!=24052) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, s,
712                               (s!=0x2def7bc7)?"| ERROR": "");
713                  TEST_QUANT(dequant4_inter, Dst, Src);  
714                  printf( "%s - dequant4_inter %.3f usec       crc=%d\n", cpu->name, t, s );                  TEST_QUANT(dequant_mpeg_inter, Dst, Src);
715                  if (s!=63847) printf( "*** CRC ERROR! ***\n" );                  printf("%s - dequant_mpeg_inter %.3f usec       crc32=0x%08x %s\n",
716  #endif                             cpu->name, t, s,
717  #if 1                             (s!=0xd878c722)?"| ERROR": "");
718                  TEST_QUANT2(quant_intra, Dst, Src);  
719                  printf( "%s -    quant_intra %.3f usec       crc=%d\n", cpu->name, t, s );                  TEST_QUANT2(quant_h263_intra, Dst, Src);
720                  if (s!=25662) printf( "*** CRC ERROR! ***\n" );                  printf("%s -   quant_h263_intra %.3f usec       crc32=0x%08x %s\n",
721                               cpu->name, t, s,
722                  TEST_QUANT(quant_inter, Dst, Src);                             (s!=0x2eba9d43)?"| ERROR": "");
723                  printf( "%s -    quant_inter %.3f usec       crc=%d\n", cpu->name, t, s );  
724                  if (s!=23972) printf( "*** CRC ERROR! ***\n" );                  TEST_QUANT(quant_h263_inter, Dst, Src);
725  #endif                  printf("%s -   quant_h263_inter %.3f usec       crc32=0x%08x %s\n",
726  #if 1                             cpu->name, t, s,
727                  TEST_QUANT2(dequant_intra, Dst, Src);                             (s!=0xbd315a7e)?"| ERROR": "");
728                  printf( "%s -  dequant_intra %.3f usec       crc=%d\n", cpu->name, t, s );  
729                  if (s!=49900) printf( "*** CRC ERROR! ***\n" );                  TEST_QUANT2(dequant_h263_intra, Dst, Src);
730                    printf("%s - dequant_h263_intra %.3f usec       crc32=0x%08x %s\n",
731                  TEST_QUANT(dequant_inter, Dst, Src);                             cpu->name, t, s,
732                  printf( "%s -  dequant_inter %.3f usec       crc=%d\n", cpu->name, t, s );                             (s!=0x9841212a)?"| ERROR": "");
733                  if (s!=48899) printf( "*** CRC ERROR! ***\n" );  
734  #endif                  TEST_QUANT(dequant_h263_inter, Dst, Src);
735                    printf("%s - dequant_h263_inter %.3f usec       crc32=0x%08x %s\n",
736                               cpu->name, t, s,
737                               (s!=0xe7df8fba)?"| ERROR": "");
738    
739                  printf( " --- \n" );                  printf( " --- \n" );
740          }          }
741  }  }
# Line 613  Line 758 
758          const int nb_tests = 10000*speed_ref;          const int nb_tests = 10000*speed_ref;
759          int i;          int i;
760          CPU *cpu;          CPU *cpu;
761          int16_t  Src1[6*64], Src2[6*64], Src3[6*64], Src4[6*64];          DECLARE_ALIGNED_MATRIX(Src1, 6, 64, int16_t, 16);
762            DECLARE_ALIGNED_MATRIX(Src2, 6, 64, int16_t, 16);
763            DECLARE_ALIGNED_MATRIX(Src3, 6, 64, int16_t, 16);
764            DECLARE_ALIGNED_MATRIX(Src4, 6, 64, int16_t, 16);
765    
766          printf( "\n =====  test cbp =====\n" );          printf( "\n =====  test cbp =====\n" );
767    
# Line 624  Line 772 
772                  Src4[i] = (i==(3*64+2) || i==(5*64+9));                  Src4[i] = (i==(3*64+2) || i==(5*64+9));
773          }          }
774    
775          for(cpu = cpu_short_list2; cpu->name!=0; ++cpu)          for(cpu = cpu_list; cpu->name!=0; ++cpu)
776          {          {
777                  double t;                  double t;
778                  int tst, cbp;                  int tst, cbp;
# Line 633  Line 781 
781                          continue;                          continue;
782    
783                  TEST_CBP(calc_cbp, Src1);                  TEST_CBP(calc_cbp, Src1);
784                  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\n",
785                  if (cbp!=0x15) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x15)?"| ERROR": "");
786                  TEST_CBP(calc_cbp, Src2);                  TEST_CBP(calc_cbp, Src2);
787                  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\n",
788                  if (cbp!=0x38) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x38)?"| ERROR": "");
789                  TEST_CBP(calc_cbp, Src3);                  TEST_CBP(calc_cbp, Src3);
790                  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\n",
791                  if (cbp!=0x0f) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x0f)?"| ERROR": "" );
792                  TEST_CBP(calc_cbp, Src4);                  TEST_CBP(calc_cbp, Src4);
793                  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\n",
794                  if (cbp!=0x05) printf( "*** CRC ERROR! ***\n" );                             cpu->name, t, cbp, (cbp!=0x05)?"| ERROR": "" );
795                  printf( " --- \n" );                  printf( " --- \n" );
796          }          }
797  }  }
# Line 861  Line 1009 
1009          static const double ILimits[5] = { 1., 0.06, 0.02, 0.015, 0.0015 };          static const double ILimits[5] = { 1., 0.06, 0.02, 0.015, 0.0015 };
1010          int Loops = 10000;          int Loops = 10000;
1011          int i, m, n;          int i, m, n;
1012          short Blk0[64];     /* reference */          DECLARE_ALIGNED_MATRIX(Blk0, 8, 8, short, 16); /* reference */
1013          short Blk[64], iBlk[64];          DECLARE_ALIGNED_MATRIX(Blk,  8, 8, short, 16);
1014          short Ref_FDCT[64];          DECLARE_ALIGNED_MATRIX(iBlk, 8, 8, short, 16);
1015          short Ref_IDCT[64];          DECLARE_ALIGNED_MATRIX(Ref_FDCT, 8, 8, short, 16);
1016            DECLARE_ALIGNED_MATRIX(Ref_IDCT, 8, 8, short, 16);
1017    
1018          STATS_8x8 FStats; /* forward dct stats */          STATS_8x8 FStats; /* forward dct stats */
1019          STATS_8x8 IStats; /* inverse dct stats */          STATS_8x8 IStats; /* inverse dct stats */
# Line 1146  Line 1295 
1295  void test_bugs1()  void test_bugs1()
1296  {  {
1297          CPU *cpu;          CPU *cpu;
1298            uint16_t mpeg_quant_matrices[64*8];
1299    
1300          printf( "\n =====  (de)quant4_intra saturation bug? =====\n" );          printf( "\n =====  (de)quant4_intra saturation bug? =====\n" );
1301    
1302          for(cpu = cpu_short_list; cpu->name!=0; ++cpu)          for(cpu = cpu_list; cpu->name!=0; ++cpu)
1303          {          {
1304                  int i;                  int i;
1305                  int16_t  Src[8*8], Dst[8*8];                  int16_t  Src[8*8], Dst[8*8];
# Line 1158  Line 1308 
1308                          continue;                          continue;
1309    
1310                  for(i=0; i<64; ++i) Src[i] = i-32;                  for(i=0; i<64; ++i) Src[i] = i-32;
1311                  set_intra_matrix( get_default_intra_matrix() );                  set_intra_matrix( mpeg_quant_matrices, get_default_intra_matrix() );
1312                  dequant4_intra(Dst, Src, 31, 5);                  dequant_mpeg_intra(Dst, Src, 31, 5, mpeg_quant_matrices);
1313                  printf( "dequant4_intra with CPU=%s:  ", cpu->name);                  printf( "dequant_mpeg_intra with CPU=%s:  ", cpu->name);
1314                  printf( "  Out[]= " );                  printf( "  Out[]= " );
1315                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);
1316                  printf( "\n" );                  printf( "\n" );
# Line 1168  Line 1318 
1318    
1319          printf( "\n =====  (de)quant4_inter saturation bug? =====\n" );          printf( "\n =====  (de)quant4_inter saturation bug? =====\n" );
1320    
1321          for(cpu = cpu_short_list; cpu->name!=0; ++cpu)          for(cpu = cpu_list; cpu->name!=0; ++cpu)
1322          {          {
1323                  int i;                  int i;
1324                  int16_t  Src[8*8], Dst[8*8];                  int16_t  Src[8*8], Dst[8*8];
# Line 1177  Line 1327 
1327                          continue;                          continue;
1328    
1329                  for(i=0; i<64; ++i) Src[i] = i-32;                  for(i=0; i<64; ++i) Src[i] = i-32;
1330                  set_inter_matrix( get_default_inter_matrix() );                  set_inter_matrix( mpeg_quant_matrices, get_default_inter_matrix() );
1331                  dequant4_inter(Dst, Src, 31);                  dequant_mpeg_inter(Dst, Src, 31, mpeg_quant_matrices);
1332                  printf( "dequant4_inter with CPU=%s:  ", cpu->name);                  printf( "dequant_mpeg_inter with CPU=%s:  ", cpu->name);
1333                  printf( "  Out[]= " );                  printf( "  Out[]= " );
1334                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);                  for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);
1335                  printf( "\n" );                  printf( "\n" );
# Line 1189  Line 1339 
1339  void test_dct_precision_diffs()  void test_dct_precision_diffs()
1340  {  {
1341          CPU *cpu;          CPU *cpu;
1342          short Blk[8*8], Blk0[8*8];          DECLARE_ALIGNED_MATRIX(Blk, 8, 8, int16_t, 16);
1343            DECLARE_ALIGNED_MATRIX(Blk0, 8, 8, int16_t, 16);
1344    
1345          printf( "\n =====  fdct/idct precision diffs =====\n" );          printf( "\n =====  fdct/idct precision diffs =====\n" );
1346    
1347          for(cpu = cpu_short_list; cpu->name!=0; ++cpu)          for(cpu = cpu_list; cpu->name!=0; ++cpu)
1348          {          {
1349                  int i;                  int i;
1350    
# Line 1222  Line 1373 
1373          const int max_Q = 31;          const int max_Q = 31;
1374          int i, n, qm, q;          int i, n, qm, q;
1375          CPU *cpu;          CPU *cpu;
1376          int16_t  Src[8*8], Dst[8*8];          DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16);
1377            DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16);
1378          uint8_t Quant[8*8];          uint8_t Quant[8*8];
1379          CPU cpu_bug_list[] = { { "PLAINC", 0 }, { "MMX   ", XVID_CPU_MMX }, {0,0} };          CPU cpu_bug_list[] = { { "PLAINC", 0 }, { "MMX   ", XVID_CPU_MMX }, {0,0} };
1380          uint16_t Crcs_Inter[2][32];          uint16_t Crcs_Inter[2][32];
1381          uint16_t Crcs_Intra[2][32];          uint16_t Crcs_Intra[2][32];
1382            DECLARE_ALIGNED_MATRIX(mpeg_quant_matrices, 8, 64, uint16_t, 16);
1383    
1384          printf( "\n =====  test MPEG4-quantize bug =====\n" );          printf( "\n =====  test MPEG4-quantize bug =====\n" );
1385    
1386          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 1235  Line 1389 
1389          for(qm=1; qm<=255; ++qm)          for(qm=1; qm<=255; ++qm)
1390          {          {
1391                  for(i=0; i<8*8; ++i) Quant[i] = qm;                  for(i=0; i<8*8; ++i) Quant[i] = qm;
1392                  set_inter_matrix( Quant );                  set_inter_matrix( mpeg_quant_matrices, Quant );
1393    
1394                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)
1395                  {                  {
# Line 1246  Line 1400 
1400    
1401                          for(q=1; q<=max_Q; ++q) {                          for(q=1; q<=max_Q; ++q) {
1402                                  emms();                                  emms();
1403                                  quant4_inter( Dst, Src, q );                                  quant_mpeg_inter( Dst, Src, q, mpeg_quant_matrices );
1404                                  emms();                                  emms();
1405                                  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;
1406                                  Crcs_Inter[n][q] = s;                                  Crcs_Inter[n][q] = s;
# Line 1265  Line 1419 
1419          for(qm=1; qm<=255; ++qm)          for(qm=1; qm<=255; ++qm)
1420          {          {
1421                  for(i=0; i<8*8; ++i) Quant[i] = qm;                  for(i=0; i<8*8; ++i) Quant[i] = qm;
1422                  set_intra_matrix( Quant );                  set_intra_matrix( mpeg_quant_matrices, Quant );
1423    
1424                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)                  for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)
1425                  {                  {
# Line 1276  Line 1430 
1430    
1431                          for(q=1; q<=max_Q; ++q) {                          for(q=1; q<=max_Q; ++q) {
1432                                  emms();                                  emms();
1433                                  quant4_intra( Dst, Src, q, q);                                  quant_mpeg_intra( Dst, Src, q, q, mpeg_quant_matrices);
1434                                  emms();                                  emms();
1435                                  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;
1436                                  Crcs_Intra[n][q] = s;                                  Crcs_Intra[n][q] = s;
# Line 1309  Line 1463 
1463    
1464          if (what==7) {          if (what==7) {
1465                  test_IEEE1180_compliance(-256, 255, 1);                  test_IEEE1180_compliance(-256, 255, 1);
 #if 0  
1466                  test_IEEE1180_compliance(-256, 255,-1);                  test_IEEE1180_compliance(-256, 255,-1);
1467                  test_IEEE1180_compliance(  -5,   5, 1);                  test_IEEE1180_compliance(  -5,   5, 1);
1468                  test_IEEE1180_compliance(  -5,   5,-1);                  test_IEEE1180_compliance(  -5,   5,-1);
1469                  test_IEEE1180_compliance(-300, 300, 1);                  test_IEEE1180_compliance(-300, 300, 1);
1470                  test_IEEE1180_compliance(-300, 300,-1);                  test_IEEE1180_compliance(-300, 300,-1);
 #endif  
1471          }          }
1472          if (what==8) test_dct_saturation(-256, 255);          if (what==8) test_dct_saturation(-256, 255);
1473    
# Line 1337  Line 1489 
1489          if (what==-2)          if (what==-2)
1490                  test_quant_bug();                  test_quant_bug();
1491    
1492            if (what >= 0 && what <= 6) {
1493                    printf("\n\n"
1494                               "NB: If a function isn't optimised for a specific set of intructions,\n"
1495                               "    a C function is used instead. So don't panic if some functions\n"
1496                               "    may appear to be slow.\n");
1497            }
1498    
1499    #ifdef ARCH_IS_IA32
1500            if (what == 0 || what == 5) {
1501                    printf("\n"
1502                               "NB: MMX mpeg4 quantization is known to have very small errors (+/-1 magnitude)\n"
1503                               "    for 1 or 2 coefficients a block. This is mainly caused by the fact the unit\n"
1504                               "    test goes far behind the usual limits of real encoding. Please do not report\n"
1505                               "    this error to the developers.\n");
1506            }
1507    #endif
1508    
1509          return 0;          return 0;
1510  }  }
1511    
1512  /*********************************************************************  /*********************************************************************
1513   * 'Reference' output (except for timing) on a PIII 1.13Ghz/linux   * 'Reference' output (except for timing) on an Athlon XP 2200+
1514   *********************************************************************/   *********************************************************************/
1515    
1516  /* as of 07/01/2002, there's a problem with mpeg4-quantization */  /* as of 2002-01-07, there's a problem with MMX mpeg4-quantization */
1517  /*  /* as of 2003-11-30, the problem is still here */
1518    
1519    /*********************************************************************
1520    
1521    
1522  ===== test fdct/idct =====  ===== test fdct/idct =====
1523  PLAINC -  3.312 usec       PSNR=13.291  MSE=3.000  PLAINC -  2.867 usec       PSNR=13.291  MSE=3.000
1524  MMX    -  0.591 usec       PSNR=13.291  MSE=3.000  MMX    -  -0.211 usec       PSNR=9.611  MSE=7.000
1525  MMXEXT -  0.577 usec       PSNR=13.291  MSE=3.000  MMXEXT -  -0.256 usec       PSNR=9.611  MSE=7.000
1526  SSE2   -  0.588 usec       PSNR=13.291  MSE=3.000  3DNOW  -  2.855 usec       PSNR=13.291  MSE=3.000
1527  3DNOW  - skipped...  3DNOWE -  1.429 usec       PSNR=13.291  MSE=3.000
 3DNOWE - skipped...  
1528    
1529  ===  test block motion ===  ===  test block motion ===
1530  PLAINC - interp- h-round0 0.911 usec       iCrc=8107  PLAINC - interp- h-round0 0.538 usec       crc32=0x115381ba
1531  PLAINC -           round1 0.863 usec       iCrc=8100  PLAINC -           round1 0.527 usec       crc32=0x2b1f528f
1532  PLAINC - interp- v-round0 0.860 usec       iCrc=8108  PLAINC - interp- v-round0 0.554 usec       crc32=0x423cdcc7
1533  PLAINC -           round1 0.857 usec       iCrc=8105  PLAINC -           round1 0.551 usec       crc32=0x42202efe
1534  PLAINC - interp-hv-round0 2.103 usec       iCrc=8112  PLAINC - interp-hv-round0 1.041 usec       crc32=0xd198d387
1535  PLAINC -           round1 2.050 usec       iCrc=8103  PLAINC -           round1 1.038 usec       crc32=0x9ecfd921
1536  ---   ---
1537  MMX    - interp- h-round0 0.105 usec       iCrc=8107  MMX    - interp- h-round0 0.051 usec       crc32=0x115381ba
1538  MMX    -           round1 0.106 usec       iCrc=8100  MMX    -           round1 0.053 usec       crc32=0x2b1f528f
1539  MMX    - interp- v-round0 0.106 usec       iCrc=8108  MMX    - interp- v-round0 0.048 usec       crc32=0x423cdcc7
1540  MMX    -           round1 0.106 usec       iCrc=8105  MMX    -           round1 0.048 usec       crc32=0x42202efe
1541  MMX    - interp-hv-round0 0.145 usec       iCrc=8112  MMX    - interp-hv-round0 0.074 usec       crc32=0xd198d387
1542  MMX    -           round1 0.145 usec       iCrc=8103  MMX    -           round1 0.073 usec       crc32=0x9ecfd921
1543  ---   ---
1544  MMXEXT - interp- h-round0 0.028 usec       iCrc=8107  MMXEXT - interp- h-round0 0.020 usec       crc32=0x115381ba
1545  MMXEXT -           round1 0.041 usec       iCrc=8100  MMXEXT -           round1 0.025 usec       crc32=0x2b1f528f
1546  MMXEXT - interp- v-round0 0.027 usec       iCrc=8108  MMXEXT - interp- v-round0 0.016 usec       crc32=0x423cdcc7
1547  MMXEXT -           round1 0.041 usec       iCrc=8105  MMXEXT -           round1 0.024 usec       crc32=0x42202efe
1548  MMXEXT - interp-hv-round0 0.066 usec       iCrc=8112  MMXEXT - interp-hv-round0 0.037 usec       crc32=0xd198d387
1549  MMXEXT -           round1 0.065 usec       iCrc=8103  MMXEXT -           round1 0.037 usec       crc32=0x9ecfd921
1550  ---   ---
1551  SSE2   - interp- h-round0 0.109 usec       iCrc=8107  3DNOW  - interp- h-round0 0.020 usec       crc32=0x115381ba
1552  SSE2   -           round1 0.105 usec       iCrc=8100  3DNOW  -           round1 0.029 usec       crc32=0x2b1f528f
1553  SSE2   - interp- v-round0 0.106 usec       iCrc=8108  3DNOW  - interp- v-round0 0.016 usec       crc32=0x423cdcc7
1554  SSE2   -           round1 0.109 usec       iCrc=8105  3DNOW  -           round1 0.024 usec       crc32=0x42202efe
1555  SSE2   - interp-hv-round0 0.145 usec       iCrc=8112  3DNOW  - interp-hv-round0 0.038 usec       crc32=0xd198d387
1556  SSE2   -           round1 0.145 usec       iCrc=8103  3DNOW  -           round1 0.039 usec       crc32=0x9ecfd921
1557     ---
1558    3DNOWE - interp- h-round0 0.020 usec       crc32=0x115381ba
1559    3DNOWE -           round1 0.024 usec       crc32=0x2b1f528f
1560    3DNOWE - interp- v-round0 0.016 usec       crc32=0x423cdcc7
1561    3DNOWE -           round1 0.021 usec       crc32=0x42202efe
1562    3DNOWE - interp-hv-round0 0.037 usec       crc32=0xd198d387
1563    3DNOWE -           round1 0.036 usec       crc32=0x9ecfd921
1564  ---  ---
 3DNOW  - skipped...  
 3DNOWE - skipped...  
1565    
1566  ======  test SAD ======  ======  test SAD ======
1567  PLAINC - sad8    0.251 usec       sad=3776  PLAINC - sad8    0.505 usec       sad=3776
1568  PLAINC - sad16   1.601 usec       sad=27214  PLAINC - sad16   1.941 usec       sad=27214
1569  PLAINC - sad16bi 2.371 usec       sad=26274  PLAINC - sad16bi 4.925 usec       sad=26274
1570  PLAINC - dev16   1.564 usec       sad=3344  PLAINC - dev16   4.254 usec       sad=3344
1571  ---   ---
1572  MMX    - sad8    0.057 usec       sad=3776  MMX    - sad8    0.036 usec       sad=3776
1573  MMX    - sad16   0.182 usec       sad=27214  MMX    - sad16   0.107 usec       sad=27214
1574  MMX    - sad16bi 2.462 usec       sad=26274  MMX    - sad16bi 0.259 usec       sad=26274
1575  MMX    - dev16   0.311 usec       sad=3344  MMX    - dev16   0.187 usec       sad=3344
1576  ---   ---
1577  MMXEXT - sad8    0.036 usec       sad=3776  MMXEXT - sad8    0.016 usec       sad=3776
1578  MMXEXT - sad16   0.109 usec       sad=27214  MMXEXT - sad16   0.050 usec       sad=27214
1579  MMXEXT - sad16bi 0.143 usec       sad=26274  MMXEXT - sad16bi 0.060 usec       sad=26274
1580  MMXEXT - dev16   0.192 usec       sad=3344  MMXEXT - dev16   0.086 usec       sad=3344
1581  ---   ---
1582  SSE2   - sad8    0.057 usec       sad=3776  3DNOW  - sad8    0.506 usec       sad=3776
1583  SSE2   - sad16   0.179 usec       sad=27214  3DNOW  - sad16   1.954 usec       sad=27214
1584  SSE2   - sad16bi 2.456 usec       sad=26274  3DNOW  - sad16bi 0.119 usec       sad=26274
1585  SSE2   - dev16   0.321 usec       sad=3344  3DNOW  - dev16   4.252 usec       sad=3344
1586     ---
1587    3DNOWE - sad8    0.017 usec       sad=3776
1588    3DNOWE - sad16   0.038 usec       sad=27214
1589    3DNOWE - sad16bi 0.052 usec       sad=26274
1590    3DNOWE - dev16   0.067 usec       sad=3344
1591  ---  ---
 3DNOW  - skipped...  
 3DNOWE - skipped...  
1592    
1593  ===  test transfer ===  ===  test transfer ===
1594  PLAINC - 8to16     0.151 usec       crc=28288  PLAINC - 8to16     0.603 usec       crc32=0x115814bb
1595  PLAINC - 16to8     1.113 usec       crc=28288  PLAINC - 16to8     1.077 usec       crc32=0xee7ccbb4
1596  PLAINC - 8to8      0.043 usec       crc=20352  PLAINC - 8to8      0.679 usec       crc32=0xd37b3295
1597  PLAINC - 16to8add  1.069 usec       crc=25536  PLAINC - 16to8add  1.341 usec       crc32=0xdd817bf4
1598  PLAINC - 8to16sub  0.631 usec       crc1=28064 crc2=16256  PLAINC - 8to16sub  1.566 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1599  PLAINC - 8to16sub2 0.597 usec       crc=20384  PLAINC - 8to16sub2 2.206 usec       crc32=0x99b6c4c7
1600  ---   ---
1601  MMX    - 8to16     0.032 usec       crc=28288  MMX    - 8to16     -0.025 usec       crc32=0x115814bb
1602  MMX    - 16to8     0.024 usec       crc=28288  MMX    - 16to8     -0.049 usec       crc32=0xee7ccbb4
1603  MMX    - 8to8      0.020 usec       crc=20352  MMX    - 8to8      0.014 usec       crc32=0xd37b3295
1604  MMX    - 16to8add  0.043 usec       crc=25536  MMX    - 16to8add  0.011 usec       crc32=0xdd817bf4
1605  MMX    - 8to16sub  0.066 usec       crc1=28064 crc2=16256  MMX    - 8to16sub  0.108 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1606  MMX    - 8to16sub2 0.111 usec       crc=20384  MMX    - 8to16sub2 0.164 usec       crc32=0x99b6c4c7
1607     ---
1608    MMXEXT - 8to16     -0.054 usec       crc32=0x115814bb
1609    MMXEXT - 16to8     0.010 usec       crc32=0xee7ccbb4
1610    MMXEXT - 8to8      0.015 usec       crc32=0xd37b3295
1611    MMXEXT - 16to8add  0.008 usec       crc32=0xdd817bf4
1612    MMXEXT - 8to16sub  0.263 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1613    MMXEXT - 8to16sub2 0.178 usec       crc32=0x99b6c4c7
1614     ---
1615    3DNOW  - 8to16     0.666 usec       crc32=0x115814bb
1616    3DNOW  - 16to8     1.078 usec       crc32=0xee7ccbb4
1617    3DNOW  - 8to8      0.665 usec       crc32=0xd37b3295
1618    3DNOW  - 16to8add  1.365 usec       crc32=0xdd817bf4
1619    3DNOW  - 8to16sub  1.356 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1620    3DNOW  - 8to16sub2 2.098 usec       crc32=0x99b6c4c7
1621     ---
1622    3DNOWE - 8to16     -0.024 usec       crc32=0x115814bb
1623    3DNOWE - 16to8     0.010 usec       crc32=0xee7ccbb4
1624    3DNOWE - 8to8      0.014 usec       crc32=0xd37b3295
1625    3DNOWE - 16to8add  0.016 usec       crc32=0xdd817bf4
1626    3DNOWE - 8to16sub  -0.000 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23
1627    3DNOWE - 8to16sub2 -0.031 usec       crc32=0x99b6c4c7
1628  ---  ---
1629    
1630  =====  test quant =====  =====  test quant =====
1631  PLAINC -   quant4_intra 74.248 usec       crc=29809  PLAINC -   quant_mpeg_intra 98.631 usec       crc32=0xfd6a21a4
1632  PLAINC -   quant4_inter 70.850 usec       crc=12574  PLAINC -   quant_mpeg_inter 104.876 usec       crc32=0xf6de7757
1633  PLAINC - dequant4_intra 40.628 usec       crc=24052  PLAINC - dequant_mpeg_intra 50.285 usec       crc32=0x2def7bc7
1634  PLAINC - dequant4_inter 45.691 usec       crc=63847  PLAINC - dequant_mpeg_inter 58.316 usec       crc32=0xd878c722
1635  PLAINC -    quant_intra 43.357 usec       crc=25662  PLAINC -   quant_h263_intra 33.803 usec       crc32=0x2eba9d43
1636  PLAINC -    quant_inter 33.410 usec       crc=23972  PLAINC -   quant_h263_inter 45.411 usec       crc32=0xbd315a7e
1637  PLAINC -  dequant_intra 36.384 usec       crc=49900  PLAINC - dequant_h263_intra 39.302 usec       crc32=0x9841212a
1638  PLAINC -  dequant_inter 48.930 usec       crc=48899  PLAINC - dequant_h263_inter 44.124 usec       crc32=0xe7df8fba
1639  ---   ---
1640  MMX    -   quant4_intra 7.445 usec       crc=3459  MMX    -   quant_mpeg_intra 4.273 usec       crc32=0xdacabdb6 | ERROR
1641  *** CRC ERROR! ***  MMX    -   quant_mpeg_inter 3.576 usec       crc32=0x72883ab6 | ERROR
1642  MMX    -   quant4_inter 5.384 usec       crc=51072  MMX    - dequant_mpeg_intra 3.793 usec       crc32=0x2def7bc7
1643  *** CRC ERROR! ***  MMX    - dequant_mpeg_inter 4.808 usec       crc32=0xd878c722
1644  MMX    - dequant4_intra 5.515 usec       crc=24052  MMX    -   quant_h263_intra 2.881 usec       crc32=0x2eba9d43
1645  MMX    - dequant4_inter 7.745 usec       crc=63847  MMX    -   quant_h263_inter 2.550 usec       crc32=0xbd315a7e
1646  MMX    -    quant_intra 4.661 usec       crc=25662  MMX    - dequant_h263_intra 2.974 usec       crc32=0x9841212a
1647  MMX    -    quant_inter 4.406 usec       crc=23972  MMX    - dequant_h263_inter 2.906 usec       crc32=0xe7df8fba
1648  MMX    -  dequant_intra 4.928 usec       crc=49900   ---
1649  MMX    -  dequant_inter 4.532 usec       crc=48899  MMXEXT -   quant_mpeg_intra 4.221 usec       crc32=0xfd6a21a4
1650    MMXEXT -   quant_mpeg_inter 4.339 usec       crc32=0xf6de7757
1651    MMXEXT - dequant_mpeg_intra 3.802 usec       crc32=0x2def7bc7
1652    MMXEXT - dequant_mpeg_inter 4.821 usec       crc32=0xd878c722
1653    MMXEXT -   quant_h263_intra 2.884 usec       crc32=0x2eba9d43
1654    MMXEXT -   quant_h263_inter 2.554 usec       crc32=0xbd315a7e
1655    MMXEXT - dequant_h263_intra 2.728 usec       crc32=0x9841212a
1656    MMXEXT - dequant_h263_inter 2.611 usec       crc32=0xe7df8fba
1657     ---
1658    3DNOW  -   quant_mpeg_intra 98.512 usec       crc32=0xfd6a21a4
1659    3DNOW  -   quant_mpeg_inter 104.873 usec       crc32=0xf6de7757
1660    3DNOW  - dequant_mpeg_intra 50.219 usec       crc32=0x2def7bc7
1661    3DNOW  - dequant_mpeg_inter 58.254 usec       crc32=0xd878c722
1662    3DNOW  -   quant_h263_intra 33.778 usec       crc32=0x2eba9d43
1663    3DNOW  -   quant_h263_inter 41.998 usec       crc32=0xbd315a7e
1664    3DNOW  - dequant_h263_intra 39.344 usec       crc32=0x9841212a
1665    3DNOW  - dequant_h263_inter 43.607 usec       crc32=0xe7df8fba
1666     ---
1667    3DNOWE -   quant_mpeg_intra 98.490 usec       crc32=0xfd6a21a4
1668    3DNOWE -   quant_mpeg_inter 104.889 usec       crc32=0xf6de7757
1669    3DNOWE - dequant_mpeg_intra 3.277 usec       crc32=0x2def7bc7
1670    3DNOWE - dequant_mpeg_inter 4.485 usec       crc32=0xd878c722
1671    3DNOWE -   quant_h263_intra 1.882 usec       crc32=0x2eba9d43
1672    3DNOWE -   quant_h263_inter 2.246 usec       crc32=0xbd315a7e
1673    3DNOWE - dequant_h263_intra 3.457 usec       crc32=0x9841212a
1674    3DNOWE - dequant_h263_inter 3.275 usec       crc32=0xe7df8fba
1675  ---  ---
1676    
1677  =====  test cbp =====  =====  test cbp =====
1678  PLAINC -   calc_cbp#1 0.371 usec       cbp=0x15  PLAINC -   calc_cbp#1 0.168 usec       cbp=0x15
1679  PLAINC -   calc_cbp#2 0.432 usec       cbp=0x38  PLAINC -   calc_cbp#2 0.168 usec       cbp=0x38
1680  PLAINC -   calc_cbp#3 0.339 usec       cbp=0xf  PLAINC -   calc_cbp#3 0.157 usec       cbp=0x0f
1681  PLAINC -   calc_cbp#4 0.506 usec       cbp=0x5  PLAINC -   calc_cbp#4 0.235 usec       cbp=0x05
1682  ---   ---
1683  MMX    -   calc_cbp#1 0.136 usec       cbp=0x15  MMX    -   calc_cbp#1 0.070 usec       cbp=0x15
1684  MMX    -   calc_cbp#2 0.134 usec       cbp=0x38  MMX    -   calc_cbp#2 0.062 usec       cbp=0x38
1685  MMX    -   calc_cbp#3 0.138 usec       cbp=0xf  MMX    -   calc_cbp#3 0.062 usec       cbp=0x0f
1686  MMX    -   calc_cbp#4 0.135 usec       cbp=0x5  MMX    -   calc_cbp#4 0.061 usec       cbp=0x05
1687  ---   ---
1688  SSE2   -   calc_cbp#1 0.136 usec       cbp=0x15  MMXEXT -   calc_cbp#1 0.062 usec       cbp=0x15
1689  SSE2   -   calc_cbp#2 0.133 usec       cbp=0x38  MMXEXT -   calc_cbp#2 0.061 usec       cbp=0x38
1690  SSE2   -   calc_cbp#3 0.133 usec       cbp=0xf  MMXEXT -   calc_cbp#3 0.061 usec       cbp=0x0f
1691  SSE2   -   calc_cbp#4 0.141 usec       cbp=0x5  MMXEXT -   calc_cbp#4 0.061 usec       cbp=0x05
1692  ---  ---
1693    3DNOW  -   calc_cbp#1 0.168 usec       cbp=0x15
1694    3DNOW  -   calc_cbp#2 0.168 usec       cbp=0x38
1695    3DNOW  -   calc_cbp#3 0.157 usec       cbp=0x0f
1696    3DNOW  -   calc_cbp#4 0.238 usec       cbp=0x05
1697     ---
1698    3DNOWE -   calc_cbp#1 0.049 usec       cbp=0x15
1699    3DNOWE -   calc_cbp#2 0.049 usec       cbp=0x38
1700    3DNOWE -   calc_cbp#3 0.049 usec       cbp=0x0f
1701    3DNOWE -   calc_cbp#4 0.049 usec       cbp=0x05
1702     ---
1703    
1704    
1705  */  NB: If a function isn't optimised for a specific set of intructions,
1706        a C function is used instead. So don't panic if some functions
1707        may appear to be slow.
1708    
1709    NB: MMX mpeg4 quantization is known to have very small errors (+/-1 magnitude)
1710        for 1 or 2 coefficients a block. This is mainly caused by the fact the unit
1711        test goes far behind the usual limits of real encoding. Please do not report
1712        this error to the developers
1713    
1714    *********************************************************************/

Legend:
Removed from v.1060  
changed lines
  Added in v.1261

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