[Liboil-commit] liboil/liboilclasses.h liboil/liboilfuncs-04.h liboil/liboilfuncs-doc.h liboil/liboilfuncs.h liboil/liboiltrampolines.c liboil/ref

David Schleef ds at kemper.freedesktop.org
Mon Feb 18 18:36:43 PST 2008


 liboil/liboilclasses.h         |    2 +
 liboil/liboilfuncs-04.h        |    2 +
 liboil/liboilfuncs-doc.h       |    2 +
 liboil/liboilfuncs.h           |    6 +++
 liboil/liboiltrampolines.c     |   20 ++++++++++
 liboil/ref/Makefile.am         |    2 +
 liboil/ref/diffsquaresum_f32.c |   75 +++++++++++++++++++++++++++++++++++++++++
 liboil/ref/squaresum_f32.c     |   66 ++++++++++++++++++++++++++++++++++++
 8 files changed, 175 insertions(+)

New commits:
commit 8fbb8a7fd83aa7f761a8bba2453097f1a53c77ec
Author: David Schleef <ds at ginger.bigkitten.com>
Date:   Mon Feb 18 18:38:37 2008 -0800

    Add diffsquaresum_f32 and squaresum_f32

diff --git a/liboil/liboilclasses.h b/liboil/liboilclasses.h
index 945a318..484b2eb 100644
--- a/liboil/liboilclasses.h
+++ b/liboil/liboilclasses.h
@@ -248,6 +248,7 @@ OIL_DECLARE_CLASS(dequantize8x8_s16);
 OIL_DECLARE_CLASS(diff8x8_average_s16_u8);
 OIL_DECLARE_CLASS(diff8x8_const128_s16_u8);
 OIL_DECLARE_CLASS(diff8x8_s16_u8);
+OIL_DECLARE_CLASS(diffsquaresum_f32);
 OIL_DECLARE_CLASS(diffsquaresum_f64);
 OIL_DECLARE_CLASS(divide_f32);
 OIL_DECLARE_CLASS(divide_f64);
@@ -404,6 +405,7 @@ OIL_DECLARE_CLASS(split_135);
 OIL_DECLARE_CLASS(split_53);
 OIL_DECLARE_CLASS(split_approx97);
 OIL_DECLARE_CLASS(split_daub97);
+OIL_DECLARE_CLASS(squaresum_f32);
 OIL_DECLARE_CLASS(squaresum_f64);
 OIL_DECLARE_CLASS(squaresum_shifted_s16);
 OIL_DECLARE_CLASS(subtract_f32);
diff --git a/liboil/liboilfuncs-04.h b/liboil/liboilfuncs-04.h
index 272d33f..75f1861 100644
--- a/liboil/liboilfuncs-04.h
+++ b/liboil/liboilfuncs-04.h
@@ -248,6 +248,7 @@ void oil_dequantize8x8_s16 (int16_t * d_8x8, int dstr, const int16_t * s1_8x8, i
 void oil_diff8x8_average_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2, const uint8_t * s3_8x8, int ss3);
 void oil_diff8x8_const128_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1);
 void oil_diff8x8_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2);
+void oil_diffsquaresum_f32 (float * d_1, const float * src1, int sstr1, const float * src2, int sstr2, int n);
 void oil_diffsquaresum_f64 (double * d_1, const double * src1, int sstr1, const double * src2, int sstr2, int n);
 void oil_divide_f32 (float * d, const float * s1, const float * s2, int n);
 void oil_divide_f64 (double * d, const double * s1, const double * s2, int n);
@@ -404,6 +405,7 @@ void oil_split_135 (int16_t * d_2xn, const int16_t * s_2xn, int n);
 void oil_split_53 (int16_t * d_2xn, const int16_t * s_2xn, int n);
 void oil_split_approx97 (int16_t * d_2xn, const int16_t * s_2xn, int n);
 void oil_split_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n);
+void oil_squaresum_f32 (float * d, const float * s, int n);
 void oil_squaresum_f64 (double * d, const double * s, int n);
 void oil_squaresum_shifted_s16 (uint32_t * d, const int16_t * s, int n);
 void oil_subtract_f32 (float * d, const float * s1, const float * s2, int n);
diff --git a/liboil/liboilfuncs-doc.h b/liboil/liboilfuncs-doc.h
index 50a3e2f..e179f4c 100644
--- a/liboil/liboilfuncs-doc.h
+++ b/liboil/liboilfuncs-doc.h
@@ -212,6 +212,7 @@ void oil_dequantize8x8_s16 (int16_t * d_8x8, int dstr, const int16_t * s1_8x8, i
 void oil_diff8x8_average_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2, const uint8_t * s3_8x8, int ss3);
 void oil_diff8x8_const128_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1);
 void oil_diff8x8_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2);
+void oil_diffsquaresum_f32 (float * d_1, const float * src1, int sstr1, const float * src2, int sstr2, int n);
 void oil_diffsquaresum_f64 (double * d_1, const double * src1, int sstr1, const double * src2, int sstr2, int n);
 void oil_divide_f32 (float * d, const float * s1, const float * s2, int n);
 void oil_divide_f64 (double * d, const double * s1, const double * s2, int n);
@@ -368,6 +369,7 @@ void oil_split_135 (int16_t * d_2xn, const int16_t * s_2xn, int n);
 void oil_split_53 (int16_t * d_2xn, const int16_t * s_2xn, int n);
 void oil_split_approx97 (int16_t * d_2xn, const int16_t * s_2xn, int n);
 void oil_split_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n);
+void oil_squaresum_f32 (float * d, const float * s, int n);
 void oil_squaresum_f64 (double * d, const double * s, int n);
 void oil_squaresum_shifted_s16 (uint32_t * d, const int16_t * s, int n);
 void oil_subtract_f32 (float * d, const float * s1, const float * s2, int n);
diff --git a/liboil/liboilfuncs.h b/liboil/liboilfuncs.h
index b854a78..fd0e76d 100644
--- a/liboil/liboilfuncs.h
+++ b/liboil/liboilfuncs.h
@@ -672,6 +672,9 @@ typedef void (*_oil_type_diff8x8_const128_s16_u8)(int16_t * d_8x8, const uint8_t
 extern OilFunctionClass *oil_function_class_ptr_diff8x8_s16_u8;
 typedef void (*_oil_type_diff8x8_s16_u8)(int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2);
 #define oil_diff8x8_s16_u8 ((_oil_type_diff8x8_s16_u8)(*(void **)oil_function_class_ptr_diff8x8_s16_u8))
+extern OilFunctionClass *oil_function_class_ptr_diffsquaresum_f32;
+typedef void (*_oil_type_diffsquaresum_f32)(float * d_1, const float * src1, int sstr1, const float * src2, int sstr2, int n);
+#define oil_diffsquaresum_f32 ((_oil_type_diffsquaresum_f32)(*(void **)oil_function_class_ptr_diffsquaresum_f32))
 extern OilFunctionClass *oil_function_class_ptr_diffsquaresum_f64;
 typedef void (*_oil_type_diffsquaresum_f64)(double * d_1, const double * src1, int sstr1, const double * src2, int sstr2, int n);
 #define oil_diffsquaresum_f64 ((_oil_type_diffsquaresum_f64)(*(void **)oil_function_class_ptr_diffsquaresum_f64))
@@ -1140,6 +1143,9 @@ typedef void (*_oil_type_split_approx97)(int16_t * d_2xn, const int16_t * s_2xn,
 extern OilFunctionClass *oil_function_class_ptr_split_daub97;
 typedef void (*_oil_type_split_daub97)(int16_t * d_2xn, const int16_t * s_2xn, int n);
 #define oil_split_daub97 ((_oil_type_split_daub97)(*(void **)oil_function_class_ptr_split_daub97))
+extern OilFunctionClass *oil_function_class_ptr_squaresum_f32;
+typedef void (*_oil_type_squaresum_f32)(float * d, const float * s, int n);
+#define oil_squaresum_f32 ((_oil_type_squaresum_f32)(*(void **)oil_function_class_ptr_squaresum_f32))
 extern OilFunctionClass *oil_function_class_ptr_squaresum_f64;
 typedef void (*_oil_type_squaresum_f64)(double * d, const double * s, int n);
 #define oil_squaresum_f64 ((_oil_type_squaresum_f64)(*(void **)oil_function_class_ptr_squaresum_f64))
diff --git a/liboil/liboiltrampolines.c b/liboil/liboiltrampolines.c
index fa41a2e..cf565e9 100644
--- a/liboil/liboiltrampolines.c
+++ b/liboil/liboiltrampolines.c
@@ -2151,6 +2151,16 @@ oil_diff8x8_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint
   ((void (*)(int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2))(_oil_function_class_diff8x8_s16_u8.func))(d_8x8, s1_8x8, ss1, s2_8x8, ss2);
 }
 
+#undef oil_diffsquaresum_f32
+void
+oil_diffsquaresum_f32 (float * d_1, const float * src1, int sstr1, const float * src2, int sstr2, int n)
+{
+  if (_oil_function_class_diffsquaresum_f32.func == NULL) {
+    oil_class_optimize (&_oil_function_class_diffsquaresum_f32);
+  }
+  ((void (*)(float * d_1, const float * src1, int sstr1, const float * src2, int sstr2, int n))(_oil_function_class_diffsquaresum_f32.func))(d_1, src1, sstr1, src2, sstr2, n);
+}
+
 #undef oil_diffsquaresum_f64
 void
 oil_diffsquaresum_f64 (double * d_1, const double * src1, int sstr1, const double * src2, int sstr2, int n)
@@ -3711,6 +3721,16 @@ oil_split_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n)
   ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_split_daub97.func))(d_2xn, s_2xn, n);
 }
 
+#undef oil_squaresum_f32
+void
+oil_squaresum_f32 (float * d, const float * s, int n)
+{
+  if (_oil_function_class_squaresum_f32.func == NULL) {
+    oil_class_optimize (&_oil_function_class_squaresum_f32);
+  }
+  ((void (*)(float * d, const float * s, int n))(_oil_function_class_squaresum_f32.func))(d, s, n);
+}
+
 #undef oil_squaresum_f64
 void
 oil_squaresum_f64 (double * d, const double * s, int n)
diff --git a/liboil/ref/Makefile.am b/liboil/ref/Makefile.am
index f812fcb..bcf90a2 100644
--- a/liboil/ref/Makefile.am
+++ b/liboil/ref/Makefile.am
@@ -18,6 +18,7 @@ c_sources = \
 	copy8x8.c \
 	diff8x8.c \
 	diffsquaresum_f64.c \
+	diffsquaresum_f32.c \
 	error8x8.c \
 	mas.c \
 	math.c \
@@ -34,6 +35,7 @@ c_sources = \
 	sad8x8avg.c \
 	sincos_f64.c \
 	splat.c \
+	squaresum_f32.c \
 	squaresum_f64.c \
 	sum.c \
 	sum_f64.c \
diff --git a/liboil/ref/diffsquaresum_f32.c b/liboil/ref/diffsquaresum_f32.c
new file mode 100644
index 0000000..392fa14
--- /dev/null
+++ b/liboil/ref/diffsquaresum_f32.c
@@ -0,0 +1,75 @@
+/*
+ * LIBOIL - Library of Optimized Inner Loops
+ * Copyright (c) 2003,2004 David A. Schleef <ds at schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <liboil/liboilfunction.h>
+#include <liboil/simdpack/simdpack.h>
+#include <math.h>
+
+/**
+ * oil_diffsquaresum_f32:
+ * @d_1:
+ * @src1:
+ * @sstr1:
+ * @src2:
+ * @sstr2:
+ * @n:
+ *
+ * Calculates the sum of squared differences between @src1 and @src2
+ * and places the result in @d_1.
+ */
+OIL_DEFINE_CLASS (diffsquaresum_f32,
+    "float *d_1, float *src1, int sstr1, float *src2, int sstr2, int n");
+
+static void
+diffsquaresum_f32_ref(float *dest, float *src1, int sstr1, float *src2,
+    int sstr2, int n)
+{
+	double sum = 0;
+	double errsum = 0;
+	double tmp;
+	double x;
+	int i;
+
+	for(i=0;i<n;i++){
+		x = OIL_GET(src1, i*sstr1, double) -
+                  OIL_GET(src2, i*sstr2, double);
+		x = x*x;
+		tmp = sum;
+		sum += x;
+		errsum += (tmp - sum) + x;
+	}
+
+	*dest = sum + errsum;
+}
+
+OIL_DEFINE_IMPL_REF (diffsquaresum_f32_ref, diffsquaresum_f32);
+
+
diff --git a/liboil/ref/squaresum_f32.c b/liboil/ref/squaresum_f32.c
new file mode 100644
index 0000000..c8ab641
--- /dev/null
+++ b/liboil/ref/squaresum_f32.c
@@ -0,0 +1,66 @@
+/*
+ * LIBOIL - Library of Optimized Inner Loops
+ * Copyright (c) 2003,2004 David A. Schleef <ds at schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <liboil/liboilfunction.h>
+#include <liboil/simdpack/simdpack.h>
+#include <math.h>
+
+
+/**
+ * oil_squaresum_f32:
+ * @d:
+ * @s:
+ * @n:
+ *
+ * Sums the square of each element in @s and places the result in
+ * @dest.
+ */
+OIL_DEFINE_CLASS (squaresum_f32, "float *d, float *s, int n");
+
+static void
+squaresum_f32_ref(float *dest, float *src, int n)
+{
+	double sum2 = 0;
+	double errsum = 0;
+	double tmp;
+	double x;
+	int i;
+
+	for(i=0;i<n;i++){
+		tmp = sum2;
+		x = src[i]*src[i];
+		sum2 += x;
+		errsum += (tmp - sum2) + x;
+	}
+
+	*dest = sum2 + errsum;
+}
+OIL_DEFINE_IMPL_REF (squaresum_f32_ref, squaresum_f32);


More information about the Liboil-commit mailing list