summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2005-05-02 09:17:35 +0000
committerDavid Schleef <ds@schleef.org>2005-05-02 09:17:35 +0000
commitabe0870feae5d00ae27ee7b671eff5962f59110a (patch)
tree72e0077a7036e947e5c34a12c2dbd6409ac49b00 /examples
parent68c2c4e577f39f9a230cd065a34be13a0cd0b72e (diff)
downloadliboil-abe0870feae5d00ae27ee7b671eff5962f59110a.tar.gz
* examples/Makefile.am: add report
* examples/report.c: Create report of classes and speedups. * liboil/conv/conv_3dnow.c: (conv_f32_s16_3dnow), (conv_s32_f32_3dnow): reindent
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile.am6
-rw-r--r--examples/report.c179
2 files changed, 184 insertions, 1 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 9a1bda7..d648f68 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,7 +1,7 @@
SUBDIRS = jpeg md5 uberopt work huffman
-noinst_PROGRAMS = example1 oil-inspect oil-test
+noinst_PROGRAMS = example1 oil-inspect oil-test report
example1_SOURCES = example1.c
@@ -16,3 +16,7 @@ oil_test_SOURCES = oil-test.c
oil_test_CFLAGS = $(LIBOIL_CFLAGS)
oil_test_LDADD = $(LIBOIL_LIBS)
+report_SOURCES = report.c
+report_CFLAGS = $(LIBOIL_CFLAGS)
+report_LDADD = $(LIBOIL_LIBS)
+
diff --git a/examples/report.c b/examples/report.c
new file mode 100644
index 0000000..14baca3
--- /dev/null
+++ b/examples/report.c
@@ -0,0 +1,179 @@
+/*
+ * LIBOIL - Library of Optimized Inner Loops
+ * Copyright (c) 2004 David A. Schleef <ds@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/liboil.h>
+#include <liboil/liboilfunction.h>
+#include <liboil/liboilcpu.h>
+#include <liboil/liboiltest.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#if 0
+int retval = EXIT_SUCCESS;
+static void
+printerr (char *format, ...)
+{
+ va_list var_args;
+
+ va_start (var_args, format);
+ vfprintf (stderr, format, var_args);
+ va_end (var_args);
+ retval = EXIT_FAILURE;
+}
+
+static char *
+string_append (char *str, const char *append)
+{
+ char *ret;
+ if (str) {
+ size_t size = strlen (str) + 2 + strlen (append) + 1;
+ ret = malloc (size);
+ snprintf (ret, size, "%s, %s", str, append);
+ free (str);
+ } else {
+ ret = strdup (append);
+ }
+ return ret;
+}
+static char *
+oil_flags_to_string (unsigned int flags)
+{
+ char *ret = NULL;
+
+ if (flags & OIL_IMPL_FLAG_REF)
+ ret = string_append (ret, "REF");
+ if (flags & OIL_IMPL_FLAG_OPT)
+ ret = string_append (ret, "altopt");
+ if (flags & OIL_IMPL_FLAG_ASM)
+ ret = string_append (ret, "asm");
+#ifdef HAVE_CPU_I386
+ if (flags & OIL_IMPL_FLAG_CMOV)
+ ret = string_append (ret, "cmov");
+ if (flags & OIL_IMPL_FLAG_MMX)
+ ret = string_append (ret, "mmx");
+ if (flags & OIL_IMPL_FLAG_SSE)
+ ret = string_append (ret, "sse");
+ if (flags & OIL_IMPL_FLAG_MMXEXT)
+ ret = string_append (ret, "mmxext");
+ if (flags & OIL_IMPL_FLAG_SSE2)
+ ret = string_append (ret, "sse2");
+ if (flags & OIL_IMPL_FLAG_3DNOW)
+ ret = string_append (ret, "3dnow");
+ if (flags & OIL_IMPL_FLAG_3DNOWEXT)
+ ret = string_append (ret, "3dnowext");
+#endif
+#ifdef HAVE_CPU_PPC
+ if (flags & OIL_IMPL_FLAG_ALTIVEC)
+ ret = string_append (ret, "altivec");
+#endif
+ return ret;
+}
+#endif
+
+#if 0
+static void
+oil_print_impl (OilFunctionImpl *impl, OilTest *test, char* prefix)
+{
+ char *c;
+ unsigned int cpu_flags = oil_cpu_get_flags();
+
+ oil_test_check_impl (test, impl);
+
+ printf ("%s%s\n", prefix, impl->name);
+ c = oil_flags_to_string (impl->flags);
+ if (c) {
+ printf ("%s flags: %s\n", prefix, c);
+ free (c);
+ }
+ if (impl->profile_ave) {
+ printf ("%s profile: %g ticks (std.dev. %g)\n", prefix, impl->profile_ave,
+ impl->profile_std);
+ }
+ if (test && !(impl->flags & OIL_IMPL_FLAG_REF)) {
+ printf ("%s sum abs difference: %g (n=%d)\n", prefix,
+ test->sum_abs_diff, test->n_points);
+ }
+ if ((impl->flags & OIL_CPU_FLAG_MASK) & (~cpu_flags)) {
+ printf ("%s disabled\n", prefix);
+ }
+}
+#endif
+
+#if 0
+static int
+impl_compare (const void *a, const void *b)
+{
+ const OilFunctionImpl *ia = *(OilFunctionImpl **)a;
+ const OilFunctionImpl *ib = *(OilFunctionImpl **)b;
+
+ if (ia->profile_ave < ib->profile_ave) return -1;
+ if (ia->profile_ave > ib->profile_ave) return 1;
+ return 0;
+}
+#endif
+
+static void
+oil_print_class (OilFunctionClass *klass, int verbose)
+{
+
+ printf ("%-20s %-10g %-10g %-10.3g\n", klass->name,
+ klass->reference_impl->profile_ave,
+ klass->chosen_impl->profile_ave,
+ klass->reference_impl->profile_ave/klass->chosen_impl->profile_ave);
+
+}
+
+static void
+oil_print_all (void)
+{
+ int i;
+ int n;
+
+ n = oil_class_get_n_classes ();
+ for (i = 0; i < n; i++){
+ OilFunctionClass *klass = oil_class_get_by_index (i);
+ oil_print_class (klass, 0);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ oil_init();
+
+ oil_print_all ();
+
+ return 0;
+}
+