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.25 2005-09-23 12:53:35 suxen_drol Exp $ |
* $Id: xvid_bench.c,v 1.28 2006-06-05 21:30:49 Skal Exp $ |
23 |
* |
* |
24 |
****************************************************************************/ |
****************************************************************************/ |
25 |
|
|
518 |
(iCrc!=8107)?"| ERROR": "" ); |
(iCrc!=8107)?"| ERROR": "" ); |
519 |
#endif |
#endif |
520 |
|
|
521 |
|
/* New functions for field prediction by CK 1.10.2005 */ |
522 |
|
#pragma NEW8X4 |
523 |
|
TEST_MB(interpolate8x4_halfpel_h, 0); |
524 |
|
printf("%s - interpfield-h -round0 %.3f usec crc32=0x%08x %s\n", |
525 |
|
cpu->name, t, iCrc, |
526 |
|
(iCrc!=0x9538d6df)?"| ERROR": "" ); |
527 |
|
|
528 |
|
TEST_MB(interpolate8x4_halfpel_h, 1); |
529 |
|
printf("%s - round1 %.3f usec crc32=0x%08x %s\n", |
530 |
|
cpu->name, t, iCrc, |
531 |
|
(iCrc!=0xde5f1db4)?"| ERROR": "" ); |
532 |
|
|
533 |
|
|
534 |
|
TEST_MB(interpolate8x4_halfpel_v, 0); |
535 |
|
printf("%s - interpfield- v-round0 %.3f usec crc32=0x%08x %s\n", |
536 |
|
cpu->name, t, iCrc, |
537 |
|
(iCrc!=0xea5a69ef)?"| ERROR": "" ); |
538 |
|
|
539 |
|
TEST_MB(interpolate8x4_halfpel_v, 1); |
540 |
|
printf("%s - round1 %.3f usec crc32=0x%08x %s\n", |
541 |
|
cpu->name, t, iCrc, |
542 |
|
(iCrc!=0x4f10ec0f)?"| ERROR": "" ); |
543 |
|
|
544 |
|
|
545 |
|
TEST_MB(interpolate8x4_halfpel_hv, 0); |
546 |
|
printf("%s - interpfield-hv-round0 %.3f usec crc32=0x%08x %s\n", |
547 |
|
cpu->name, t, iCrc, |
548 |
|
(iCrc!=0xf97ee367)?"| ERROR": "" ); |
549 |
|
|
550 |
|
TEST_MB(interpolate8x4_halfpel_hv, 1); |
551 |
|
printf("%s - round1 %.3f usec crc32=0x%08x %s\n", |
552 |
|
cpu->name, t, iCrc, |
553 |
|
(iCrc!=0xb6a9f581)?"| ERROR": "" ); |
554 |
|
/* End of 8x4 functions */ |
555 |
|
|
556 |
printf( " --- \n" ); |
printf( " --- \n" ); |
557 |
} |
} |
558 |
} |
} |
559 |
|
|
560 |
|
#undef ENTER |
561 |
|
#undef LEAVE |
562 |
|
#undef TEST_MB |
563 |
|
#undef TEST_MB2 |
564 |
|
|
565 |
/********************************************************************* |
/********************************************************************* |
566 |
* test transfer |
* test transfer |
567 |
*********************************************************************/ |
*********************************************************************/ |
665 |
cpu->name, t, s, |
cpu->name, t, s, |
666 |
(s!=0xee7ccbb4)?"| ERROR": ""); |
(s!=0xee7ccbb4)?"| ERROR": ""); |
667 |
|
|
668 |
|
/* New functions for field prediction by CK 1.10.2005 */ |
669 |
|
#pragma NEW8X4 |
670 |
|
TEST_TRANSFER(transfer8x4_copy, Dst8, Src8); |
671 |
|
printf("%s - 8to4 %.3f usec crc32=0x%08x %s\n", |
672 |
|
cpu->name, t, s, |
673 |
|
(s!=0xbb9c3db5)?"| ERROR": ""); |
674 |
|
/* End of new functions */ |
675 |
|
|
676 |
TEST_TRANSFER(transfer8x8_copy, Dst8, Src8); |
TEST_TRANSFER(transfer8x8_copy, Dst8, Src8); |
677 |
printf("%s - 8to8 %.3f usec crc32=0x%08x %s\n", |
printf("%s - 8to8 %.3f usec crc32=0x%08x %s\n", |
678 |
cpu->name, t, s, |
cpu->name, t, s, |
1705 |
} |
} |
1706 |
#endif |
#endif |
1707 |
} |
} |
1708 |
|
|
1709 |
|
/********************************************************************* |
1710 |
|
* test some YUV func |
1711 |
|
*********************************************************************/ |
1712 |
|
|
1713 |
|
#define ENTER \ |
1714 |
|
for(i=0; i<(int)sizeof(Dst0); ++i) Dst0[0][i] = 0; \ |
1715 |
|
t = gettime_usec(); \ |
1716 |
|
emms(); |
1717 |
|
|
1718 |
|
#define LEAVE \ |
1719 |
|
emms(); \ |
1720 |
|
t = (gettime_usec() - t) / nb_tests; \ |
1721 |
|
iCrc = calc_crc((uint8_t*)Dst0, sizeof(Dst0), CRC32_INITIAL) |
1722 |
|
|
1723 |
|
#define TEST_YUYV(FUNC, S) \ |
1724 |
|
ENTER \ |
1725 |
|
for(tst=0; tst<nb_tests; ++tst) (FUNC)(Dst0[0], S*WIDTH, Src0[0], Src0[1], Src0[2], WIDTH, WIDTH/2, WIDTH, HEIGHT, 0); \ |
1726 |
|
LEAVE |
1727 |
|
|
1728 |
|
#define WIDTH 64 |
1729 |
|
#define HEIGHT 64 |
1730 |
|
void test_yuv() |
1731 |
|
{ |
1732 |
|
const int nb_tests = 200*speed_ref; |
1733 |
|
CPU *cpu; |
1734 |
|
uint8_t Src0[3][WIDTH*HEIGHT]; |
1735 |
|
uint8_t Dst0[4][WIDTH*HEIGHT]; |
1736 |
|
int i, j; |
1737 |
|
double t; |
1738 |
|
int tst, iCrc; |
1739 |
|
|
1740 |
|
colorspace_init(); |
1741 |
|
ieee_reseed(1); |
1742 |
|
for(i=0; i<(int)sizeof(Src0); ++i) Src0[0][i] = ieee_rand(0,255); |
1743 |
|
|
1744 |
|
printf( "\n === test YUV ===\n" ); |
1745 |
|
|
1746 |
|
init_cpu(&cpu_list[0]); |
1747 |
|
TEST_YUYV(yv12_to_yuyv_c, 4); |
1748 |
|
printf(" yv12_to_yuyv_c %.3f usec crc32=0x%08x %s\n", |
1749 |
|
t, iCrc, (iCrc!=0xeb1a0b0a)?"| ERROR": "" ); |
1750 |
|
TEST_YUYV(yv12_to_uyvy_c, 4); |
1751 |
|
printf(" yv12_to_uyvy_c %.3f usec crc32=0x%08x %s\n", |
1752 |
|
t, iCrc, (iCrc!=0x6e82f55b)?"| ERROR": "" ); |
1753 |
|
|
1754 |
|
#ifdef ARCH_IS_IA32 |
1755 |
|
init_cpu(&cpu_list[1]); |
1756 |
|
TEST_YUYV(yv12_to_yuyv_mmx, 4); |
1757 |
|
printf(" yv12_to_yuyv_mmx %.3f usec crc32=0x%08x %s\n", |
1758 |
|
t, iCrc, (iCrc!=0xeb1a0b0a)?"| ERROR": "" ); |
1759 |
|
|
1760 |
|
TEST_YUYV(yv12_to_uyvy_mmx, 4); |
1761 |
|
printf(" yv12_to_uyvy_mmx %.3f usec crc32=0x%08x %s\n", |
1762 |
|
t, iCrc, (iCrc!=0x6e82f55b)?"| ERROR": "" ); |
1763 |
|
#endif |
1764 |
|
|
1765 |
|
#ifdef ARCH_IS_PPC |
1766 |
|
init_cpu(&cpu_list[1]); |
1767 |
|
TEST_YUYV(yv12_to_yuyv_altivec_c, 4); |
1768 |
|
printf(" yv12_to_yuyv_altivec_c %.3f usec crc32=0x%08x %s\n", |
1769 |
|
t, iCrc, (iCrc!=0xeb1a0b0a)?"| ERROR": "" ); |
1770 |
|
|
1771 |
|
TEST_YUYV(yv12_to_uyvy_altivec_c, 4); |
1772 |
|
printf(" yv12_to_uyvy_altivec_c %.3f usec crc32=0x%08x %s\n", |
1773 |
|
t, iCrc, (iCrc!=0x6e82f55b)?"| ERROR": "" ); |
1774 |
|
#endif |
1775 |
|
printf( " --- \n" ); |
1776 |
|
} |
1777 |
|
#undef WIDTH |
1778 |
|
#undef HEIGHT |
1779 |
|
#undef ENTER |
1780 |
|
#undef LEAVE |
1781 |
|
|
1782 |
/*********************************************************************/ |
/*********************************************************************/ |
1783 |
|
|
1784 |
static uint32_t __inline log2bin_v1(uint32_t value) |
static uint32_t __inline log2bin_v1(uint32_t value) |
1901 |
} |
} |
1902 |
|
|
1903 |
/********************************************************************* |
/********************************************************************* |
1904 |
|
* test compiler |
1905 |
|
*********************************************************************/ |
1906 |
|
|
1907 |
|
void test_compiler() { |
1908 |
|
int nb_err = 0; |
1909 |
|
int32_t v; |
1910 |
|
if (sizeof(uint16_t)<2) { |
1911 |
|
printf( "ERROR: sizeof(uint16_t)<2 !!\n" ); |
1912 |
|
nb_err++; |
1913 |
|
} |
1914 |
|
if (sizeof(int16_t)<2) { |
1915 |
|
printf( "ERROR: sizeof(int16_t)<2 !!\n" ); |
1916 |
|
nb_err++; |
1917 |
|
} |
1918 |
|
if (sizeof(uint8_t)!=1) { |
1919 |
|
printf( "ERROR: sizeof(uint8_t)!=1 !!\n" ); |
1920 |
|
nb_err++; |
1921 |
|
} |
1922 |
|
if (sizeof(int8_t)!=1) { |
1923 |
|
printf( "ERROR: sizeof(int8_t)!=1 !!\n" ); |
1924 |
|
nb_err++; |
1925 |
|
} |
1926 |
|
if (sizeof(uint32_t)<4) { |
1927 |
|
printf( "ERROR: sizeof(uint32_t)<4 !!\n" ); |
1928 |
|
nb_err++; |
1929 |
|
} |
1930 |
|
if (sizeof(int32_t)<4) { |
1931 |
|
printf( "ERROR: sizeof(int32_t)<4 !!\n" ); |
1932 |
|
nb_err++; |
1933 |
|
} |
1934 |
|
/* yes, i know, this test is silly. But better be safe than sorry. :) */ |
1935 |
|
for(v=1000; v>=0; v--) { |
1936 |
|
if ( (v>>2) != v/4) |
1937 |
|
nb_err++; |
1938 |
|
} |
1939 |
|
for(v=-1000; v!=-1; v++) { |
1940 |
|
if ( (v>>2) != (v/4)-!!(v%4)) |
1941 |
|
nb_err++; |
1942 |
|
} |
1943 |
|
if (nb_err!=0) { |
1944 |
|
printf( "ERROR! please post your platform/compiler specs to xvid-devel@xvid.org !\n" ); |
1945 |
|
} |
1946 |
|
} |
1947 |
|
|
1948 |
|
/********************************************************************* |
1949 |
* main |
* main |
1950 |
*********************************************************************/ |
*********************************************************************/ |
1951 |
|
|
2013 |
if (what==0 || what==10) test_sse(); |
if (what==0 || what==10) test_sse(); |
2014 |
if (what==0 || what==11) test_log2bin(); |
if (what==0 || what==11) test_log2bin(); |
2015 |
if (what==0 || what==12) test_gcd(); |
if (what==0 || what==12) test_gcd(); |
2016 |
|
if (what==0 || what==13) test_compiler(); |
2017 |
|
if (what==0 || what==14) test_yuv(); |
2018 |
|
|
2019 |
|
|
2020 |
if (what==7) { |
if (what==7) { |