diff options
author | David Schleef <ds@schleef.org> | 2004-12-02 00:45:16 +0000 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2004-12-02 00:45:16 +0000 |
commit | 321b11fdb79aec7088eeef83ad74340794524411 (patch) | |
tree | 7cf88ae351e07e8a5d2d4091dd2361d1dcdcfa34 /liboil/simdpack | |
parent | 58251e5e03a055cf2a25ec009f2cec072cb715e4 (diff) | |
download | liboil-321b11fdb79aec7088eeef83ad74340794524411.tar.gz |
* configure.ac: Add --enable-prototype-checking and
--enable-alternate-optimization.
* liboil/Makefile.am: same
* liboil/colorspace/Makefile.am: remove colorspace.h
* liboil/colorspace/rgb2bgr.c: (rgb2bgr_test): temporary fix
* liboil/colorspace/rgb2rgba.c: (rgb2rgba_test): temporary fix
* liboil/liboilfuncs.h: update
* liboil/liboilfunction.h: add alternate optimization stuff
* liboil/simdpack/Makefile.am: build alt opt lib
* liboil/simdpack/sincos_f64.c: (sincos_f64_ref),
(sincos_f64_i20_fast): change params to pointers
Diffstat (limited to 'liboil/simdpack')
-rw-r--r-- | liboil/simdpack/Makefile.am | 15 | ||||
-rw-r--r-- | liboil/simdpack/sincos_f64.c | 80 |
2 files changed, 25 insertions, 70 deletions
diff --git a/liboil/simdpack/Makefile.am b/liboil/simdpack/Makefile.am index 86a8bf3..b828077 100644 --- a/liboil/simdpack/Makefile.am +++ b/liboil/simdpack/Makefile.am @@ -1,5 +1,11 @@ -noinst_LTLIBRARIES = libsimdpack.la +if USE_ALT_OPT +opt_libs = libsimdpack_opt1.la +else +opt_libs = +endif + +noinst_LTLIBRARIES = libsimdpack.la $(opt_libs) libsimdpack_la_SOURCES = \ abs.c \ @@ -20,9 +26,16 @@ libsimdpack_la_SOURCES = \ squaresum_f64.c \ sum_f64.c \ vectoradd_f64.c +libsimdpack_la_LIBADD = \ + $(opt_libs) + +libsimdpack_opt1_la_SOURCES = $(libsimdpack_la_SOURCES) noinst_HEADERS = \ simdpack.h libsimdpack_la_CFLAGS = $(LIBOIL_CFLAGS) +libsimdpack_opt1_la_CFLAGS = $(LIBOIL_CFLAGS) \ + $(LIBOIL_OPT_CFLAGS) + diff --git a/liboil/simdpack/sincos_f64.c b/liboil/simdpack/sincos_f64.c index ba11fe5..ce6a0f0 100644 --- a/liboil/simdpack/sincos_f64.c +++ b/liboil/simdpack/sincos_f64.c @@ -21,37 +21,36 @@ #endif #include <liboil/liboilfunction.h> -#include <liboil/simdpack/simdpack.h> #include <math.h> OIL_DEFINE_CLASS (sincos_f64, - "double *dest1, double *dest2, int n, double param1, double param2"); + "double *dest1, double *dest2, int n, double *param1, double *param2"); static void -sincos_f64_ref (double *dest_sin, double *dest_cos, int n, double offset, - double interval) +sincos_f64_ref (double *dest_sin, double *dest_cos, int n, double *offset, + double *interval) { int i; for(i=0;i<n;i++){ - dest_sin[i] = sin(offset + interval*i); - dest_cos[i] = cos(offset + interval*i); + dest_sin[i] = sin(*offset + *interval*i); + dest_cos[i] = cos(*offset + *interval*i); } } OIL_DEFINE_IMPL_REF (sincos_f64_ref, sincos_f64); /* XXX This gets more inaccurate as N increases */ static void -sincos_f64_i20_fast(double *dest_sin, double *dest_cos, int n, double offset, - double interval) +sincos_f64_i20_fast(double *dest_sin, double *dest_cos, int n, double *offset, + double *interval) { int i; double c,s,dc,ds,temp_s,temp_c; - dest_sin[0] = s = sin(offset); - dest_cos[0] = c = cos(offset); - ds = sin(interval); - dc = cos(interval); + dest_sin[0] = s = sin(*offset); + dest_cos[0] = c = cos(*offset); + ds = sin(*interval); + dc = cos(*interval); for(i=1;i<n;i++){ temp_s = s*dc + c*ds; temp_c = c*dc - s*ds; @@ -62,60 +61,3 @@ sincos_f64_i20_fast(double *dest_sin, double *dest_cos, int n, double offset, OIL_DEFINE_IMPL (sincos_f64_i20_fast, sincos_f64); -#ifdef TEST_sincos_f64 -int TEST_sincos_f64(void) -{ - int i; - int pass; - int failures = 0; - f64 *dest_ref, *dest_test; - struct sl_profile_struct t; - - dest_ref = sl_malloc_f64(N*2); - dest_test = sl_malloc_f64(N*2); - - sl_profile_init(t); - srand(20021001); - - printf("I: " sl_stringify(sincos_f64_FUNC) "\n"); - - for(pass=0;pass<N_PASS;pass++){ - double interval; - double offset; - - interval = sl_rand_f64_0_1(); - offset = sl_rand_f64_0_1(); - - sincos_f64_ref(dest_ref,dest_ref+N,N,offset,interval); - sl_profile_start(t); - sincos_f64_FUNC(dest_test,dest_test+N,N,offset,interval); - sl_profile_stop(t); - - for(i=0;i<N*2;i++){ - int ok; -#ifdef INACCURATE20 - ok = fabs(dest_test[i]-dest_ref[i])<100*TWO_TO_NEG52; -#else - ok = fabs(dest_test[i]-dest_ref[i])<TWO_TO_NEG52; -#endif - //ok = sl_equal_f64_i30(dest_test[i],dest_ref[i]); - if(!ok){ - printf("%d %g %g\n",i,dest_ref[i],dest_test[i]); - failures++; - } - } - } - - sl_free(dest_ref); - sl_free(dest_test); - - if(failures){ - printf("E: %d failures\n",failures); - } - - sl_profile_print(t); - - return failures; -} -#endif - |