summaryrefslogtreecommitdiff
path: root/liboil/simdpack
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2004-12-02 00:45:16 +0000
committerDavid Schleef <ds@schleef.org>2004-12-02 00:45:16 +0000
commit321b11fdb79aec7088eeef83ad74340794524411 (patch)
tree7cf88ae351e07e8a5d2d4091dd2361d1dcdcfa34 /liboil/simdpack
parent58251e5e03a055cf2a25ec009f2cec072cb715e4 (diff)
downloadliboil-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.am15
-rw-r--r--liboil/simdpack/sincos_f64.c80
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
-