avcodec/cbrt_tablegen: speed up dynamic table creation
On systems having cbrt, there is no reason to use the slow pow function. Sample benchmark (x86-64, Haswell, GNU/Linux): new: 5124920 decicycles in cbrt_tableinit, 1 runs, 0 skips old: 12321680 decicycles in cbrt_tableinit, 1 runs, 0 skips Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
This commit is contained in:
		
							parent
							
								
									1d0c94ddae
								
							
						
					
					
						commit
						2f5075f551
					
				@ -29,7 +29,7 @@
 | 
			
		||||
#include "libavcodec/aac_defines.h"
 | 
			
		||||
 | 
			
		||||
#if USE_FIXED
 | 
			
		||||
#define CBRT(x) (int)floor((x).f * 8192 + 0.5)
 | 
			
		||||
#define CBRT(x) lrint((x).f * 8192)
 | 
			
		||||
#else
 | 
			
		||||
#define CBRT(x) x.i
 | 
			
		||||
#endif
 | 
			
		||||
@ -49,13 +49,12 @@ static av_cold void AAC_RENAME(cbrt_tableinit)(void)
 | 
			
		||||
{
 | 
			
		||||
    if (!cbrt_tab[(1<<13) - 1]) {
 | 
			
		||||
        int i;
 | 
			
		||||
        /* cbrtf() isn't available on all systems, so we use powf(). */
 | 
			
		||||
        for (i = 0; i < 1<<13; i++) {
 | 
			
		||||
            union {
 | 
			
		||||
                float f;
 | 
			
		||||
                uint32_t i;
 | 
			
		||||
            } f;
 | 
			
		||||
            f.f = pow(i, 1.0 / 3.0) * i;
 | 
			
		||||
            f.f = cbrt(i) * i;
 | 
			
		||||
            cbrt_tab[i] = CBRT(f);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#define CONFIG_HARDCODED_TABLES 0
 | 
			
		||||
#include "cbrt_tablegen.h"
 | 
			
		||||
#include "libavutil/tablegen.h"
 | 
			
		||||
#include "tableprint.h"
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user