]> git.sesse.net Git - x264/blobdiff - tools/checkasm.c
move os/compiler specific defines to their own header
[x264] / tools / checkasm.c
index 396f8b58f67ac6994aabc394a442323de2d01728..07c9210f39077ec2e9869a1303d09ac8d3826d3c 100644 (file)
@@ -1,11 +1,9 @@
-#include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
 #include <math.h>
 
 #include "common/common.h"
 #include "common/cpu.h"
-#ifdef HAVE_MMXEXT
+#ifdef HAVE_MMX
 #include "common/i386/pixel.h"
 #include "common/i386/dct.h"
 #include "common/i386/mc.h"
@@ -478,11 +476,12 @@ static int check_quant( int cpu_ref, int cpu_new )
     uint8_t cqm_buf[64] __attribute__((__aligned__(16)));
     int ret = 0, ok, used_asm;
     int oks[2] = {1,1}, used_asms[2] = {0,0};
-    int i, i_cqm;
+    int i, i_cqm, qp;
     x264_t h_buf;
     x264_t *h = &h_buf;
     h->pps = h->pps_array;
     x264_param_default( &h->param );
+    h->param.rc.i_qp_min = 26;
 
     for( i_cqm = 0; i_cqm < 4; i_cqm++ )
     {
@@ -533,112 +532,74 @@ static int check_quant( int cpu_ref, int cpu_new )
                 } \
         }
 
-#define TEST_QUANT( name, cqm ) \
+#define TEST_QUANT_DC( name, cqm ) \
         if( qf_a.name != qf_ref.name ) \
         { \
-            used_asms[0] = 1; \
-            for( i = 0; i < 64; i++ ) \
-                dct1[i] = dct2[i] = (rand() & 0x1fff) - 0xfff; \
-            qf_c.name( (void*)dct1, cqm, 20, (1<<20)/6 ); \
-            qf_a.name( (void*)dct2, cqm, 20, (1<<20)/6 ); \
-            if( memcmp( dct1, dct2, 64*2 ) )       \
-            { \
-                oks[0] = 0; \
-                fprintf( stderr, #name "(cqm=%d): [FAILED]\n", i_cqm ); \
-            } \
-        }
-
-#define TEST_QUANT8( qname, cqm, shift, divider ) \
-        if( qf_a.qname != qf_ref.qname ) \
-        { \
-            int qp; \
             used_asms[0] = 1; \
             for( qp = 51; qp > 0; qp-- ) \
             { \
-                INIT_QUANT8() \
-                qf_c.qname( (void*)dct1, cqm[qp%6], shift+qp/6, (1<<(shift+qp/6))/divider ); \
-                qf_a.qname( (void*)dct2, cqm[qp%6], shift+qp/6, (1<<(shift+qp/6))/divider ); \
-                if( memcmp( dct1, dct2, 64*2 ) ) \
+                for( i = 0; i < 16; i++ ) \
+                    dct1[i] = dct2[i] = (rand() & 0x1fff) - 0xfff; \
+                qf_c.name( (void*)dct1, h->quant4_mf[CQM_4IY][qp][0], h->quant4_bias[CQM_4IY][qp][0] ); \
+                qf_a.name( (void*)dct2, h->quant4_mf[CQM_4IY][qp][0], h->quant4_bias[CQM_4IY][qp][0] ); \
+                if( memcmp( dct1, dct2, 16*2 ) )       \
                 { \
                     oks[0] = 0; \
-                    fprintf( stderr, #qname "(qp=%d, cqm=%d, intra=%d): [FAILED]\n", qp, i_cqm, divider==3 ); \
+                    fprintf( stderr, #name "(cqm=%d): [FAILED]\n", i_cqm ); \
                     break; \
                 } \
             } \
         }
 
-#define TEST_QUANT4( qname, cqm, shift, divider ) \
+#define TEST_QUANT( qname, block, w ) \
         if( qf_a.qname != qf_ref.qname ) \
         { \
-            int qp; \
             used_asms[0] = 1; \
             for( qp = 51; qp > 0; qp-- ) \
             { \
-                INIT_QUANT4() \
-                qf_c.qname( (void*)dct1, cqm[qp%6], shift+qp/6, (1<<(shift+qp/6))/divider ); \
-                qf_a.qname( (void*)dct2, cqm[qp%6], shift+qp/6, (1<<(shift+qp/6))/divider ); \
-                if( memcmp( dct1, dct2, 16*2 ) ) \
+                INIT_QUANT##w() \
+                qf_c.qname( (void*)dct1, h->quant##w##_mf[block][qp], h->quant##w##_bias[block][qp] ); \
+                qf_a.qname( (void*)dct2, h->quant##w##_mf[block][qp], h->quant##w##_bias[block][qp] ); \
+                if( memcmp( dct1, dct2, w*w*2 ) ) \
                 { \
                     oks[0] = 0; \
-                    fprintf( stderr, #qname "(qp=%d, cqm=%d, intra=%d): [FAILED]\n", qp, i_cqm, divider==3 ); \
+                    fprintf( stderr, #qname "(qp=%d, cqm=%d, block="#block"): [FAILED]\n", qp, i_cqm ); \
                     break; \
                 } \
             } \
         }
 
-        TEST_QUANT8( quant_8x8_core, h->quant8_mf[CQM_8IY], 16, 3 );
-        TEST_QUANT8( quant_8x8_core, h->quant8_mf[CQM_8PY], 16, 6 );
-        TEST_QUANT4( quant_4x4_core, h->quant4_mf[CQM_4IY], 15, 3 );
-        TEST_QUANT4( quant_4x4_core, h->quant4_mf[CQM_4PY], 15, 6 );
-        TEST_QUANT( quant_4x4_dc_core, ***h->quant4_mf[CQM_4IY] );
-        TEST_QUANT( quant_2x2_dc_core, ***h->quant4_mf[CQM_4IC] );
+        TEST_QUANT( quant_8x8, CQM_8IY, 8 );
+        TEST_QUANT( quant_8x8, CQM_8PY, 8 );
+        TEST_QUANT( quant_4x4, CQM_4IY, 4 );
+        TEST_QUANT( quant_4x4, CQM_4PY, 4 );
+        TEST_QUANT_DC( quant_4x4_dc, **h->quant4_mf[CQM_4IY] );
+        TEST_QUANT_DC( quant_2x2_dc, **h->quant4_mf[CQM_4IC] );
 
-#define TEST_DEQUANT8( qname, dqname, cqm, dqm, shift, divider ) \
+#define TEST_DEQUANT( qname, dqname, block, w ) \
         if( qf_a.dqname != qf_ref.dqname ) \
         { \
-            int qp; \
             used_asms[1] = 1; \
             for( qp = 51; qp > 0; qp-- ) \
             { \
-                INIT_QUANT8() \
-                qf_c.qname( (void*)dct1, cqm[qp%6], shift+qp/6, (1<<(shift+qp/6))/divider ); \
-                memcpy( dct2, dct1, 64*2 ); \
-                qf_c.dqname( (void*)dct1, dqm, qp ); \
-                qf_a.dqname( (void*)dct2, dqm, qp ); \
-                if( memcmp( dct1, dct2, 64*2 ) ) \
+                INIT_QUANT##w() \
+                qf_c.qname( (void*)dct1, h->quant##w##_mf[block][qp], h->quant##w##_bias[block][qp] ); \
+                memcpy( dct2, dct1, w*w*2 ); \
+                qf_c.dqname( (void*)dct1, h->dequant##w##_mf[block], qp ); \
+                qf_a.dqname( (void*)dct2, h->dequant##w##_mf[block], qp ); \
+                if( memcmp( dct1, dct2, w*w*2 ) ) \
                 { \
                     oks[1] = 0; \
-                    fprintf( stderr, #dqname "(qp=%d, cqm=%d, intra=%d): [FAILED]\n", qp, i_cqm, divider==3 ); \
+                    fprintf( stderr, #dqname "(qp=%d, cqm=%d, block="#block"): [FAILED]\n", qp, i_cqm ); \
                     break; \
                 } \
             } \
         }
 
-#define TEST_DEQUANT4( qname, dqname, cqm, dqm, shift, divider ) \
-        if( qf_a.dqname != qf_ref.dqname ) \
-        { \
-            int qp; \
-            used_asms[1] = 1; \
-            for( qp = 51; qp > 0; qp-- ) \
-            { \
-                INIT_QUANT4() \
-                qf_c.qname( (void*)dct1, cqm[qp%6], shift+qp/6, (1<<(shift+qp/6))/divider ); \
-                memcpy( dct2, dct1, 16*2 ); \
-                qf_c.dqname( (void*)dct1, dqm, qp ); \
-                qf_a.dqname( (void*)dct2, dqm, qp ); \
-                if( memcmp( dct1, dct2, 16*2 ) ) \
-                { \
-                    oks[1] = 0; \
-                    fprintf( stderr, #dqname "(qp=%d, cqm=%d, intra=%d): [FAILED]\n", qp, i_cqm, divider==3 ); \
-                    break; \
-                } \
-            } \
-        }
-
-        TEST_DEQUANT8( quant_8x8_core, dequant_8x8, h->quant8_mf[CQM_8IY], h->dequant8_mf[CQM_8IY], 16, 3 );
-        TEST_DEQUANT8( quant_8x8_core, dequant_8x8, h->quant8_mf[CQM_8PY], h->dequant8_mf[CQM_8PY], 16, 6 );
-        TEST_DEQUANT4( quant_4x4_core, dequant_4x4, h->quant4_mf[CQM_4IY], h->dequant4_mf[CQM_4IY], 15, 3 );
-        TEST_DEQUANT4( quant_4x4_core, dequant_4x4, h->quant4_mf[CQM_4PY], h->dequant4_mf[CQM_4PY], 15, 6 );
+        TEST_DEQUANT( quant_8x8, dequant_8x8, CQM_8IY, 8 );
+        TEST_DEQUANT( quant_8x8, dequant_8x8, CQM_8PY, 8 );
+        TEST_DEQUANT( quant_4x4, dequant_4x4, CQM_4IY, 4 );
+        TEST_DEQUANT( quant_4x4, dequant_4x4, CQM_4PY, 4 );
     }
 
     ok = oks[0]; used_asm = used_asms[0];
@@ -758,11 +719,11 @@ int main(int argc, char *argv[])
         buf3[i] = buf4[i] = 0;
     }
 
-#ifdef HAVE_MMXEXT
+#ifdef HAVE_MMX
     fprintf( stderr, "x264: MMXEXT against C\n" );
     cpu1 = X264_CPU_MMX | X264_CPU_MMXEXT;
     ret = check_all( 0, cpu1 );
-#ifdef HAVE_SSE2
+
     if( x264_cpu_detect() & X264_CPU_SSE2 )
     {
         fprintf( stderr, "\nx264: SSE2 against C\n" );
@@ -778,7 +739,6 @@ int main(int argc, char *argv[])
             ret |= check_all( cpu0, cpu1 );
         }
     }
-#endif
 #elif ARCH_PPC
     if( x264_cpu_detect() & X264_CPU_ALTIVEC )
     {