diff options
author | David Schleef <ds@schleef.org> | 2006-03-21 06:59:12 +0000 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2006-03-21 06:59:12 +0000 |
commit | 4c7a1c48e4eaefa844568e4e9aa96b95fe5c2dfc (patch) | |
tree | 3c6d7b6204b5782a5c3d213b87601a288f18e806 | |
parent | 2a034bb1f77f8bbd7a0aaa78b42f1c195f670840 (diff) | |
download | liboil-4c7a1c48e4eaefa844568e4e9aa96b95fe5c2dfc.tar.gz |
* examples/Makefile.am: add oil-bugreport
* examples/oil-bugreport.c:
* liboil/liboildebug.c:
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | examples/Makefile.am | 10 | ||||
-rw-r--r-- | examples/oil-bugreport.c | 220 | ||||
-rw-r--r-- | liboil/liboildebug.c | 1 |
4 files changed, 234 insertions, 3 deletions
@@ -1,5 +1,11 @@ 2006-03-20 David Schleef <ds@schleef.org> + * examples/Makefile.am: add oil-bugreport + * examples/oil-bugreport.c: + * liboil/liboildebug.c: + +2006-03-20 David Schleef <ds@schleef.org> + * liboil/fb/fbmmx.c: Disabling fbCompositeSolid_nx8888mmx(). I'm tired of it being randomly broken. * liboil/liboilcpu.c: Changes some of the debug messages to diff --git a/examples/Makefile.am b/examples/Makefile.am index 780c271..a590d50 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,8 +1,10 @@ SUBDIRS = jpeg md5 uberopt work huffman taylor -noinst_PROGRAMS = example1 oil-graph oil-inspect oil-test report memcpy-speed \ - oil-suggest printcpu oil-mt19937 +bin_PROGRAMS = oil-bugreport + +noinst_PROGRAMS = example1 oil-graph oil-inspect oil-test memcpy-speed \ + oil-suggest printcpu oil-mt19937 report example1_SOURCES = example1.c @@ -25,6 +27,10 @@ oil_test_SOURCES = oil-test.c oil_test_CFLAGS = $(LIBOIL_CFLAGS) oil_test_LDADD = $(LIBOIL_LIBS) +oil_bugreport_SOURCES = oil-bugreport.c +oil_bugreport_CFLAGS = $(LIBOIL_CFLAGS) +oil_bugreport_LDADD = $(LIBOIL_LIBS) + report_SOURCES = report.c report_CFLAGS = $(LIBOIL_CFLAGS) report_LDADD = $(LIBOIL_LIBS) diff --git a/examples/oil-bugreport.c b/examples/oil-bugreport.c new file mode 100644 index 0000000..c9cd034 --- /dev/null +++ b/examples/oil-bugreport.c @@ -0,0 +1,220 @@ +/* + * 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 <liboil/liboildebug.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 int +get_n_impls(OilFunctionClass *klass) +{ + OilFunctionImpl *impl; + int n; + + n = 0; + for(impl=klass->first_impl;impl;impl=impl->next)n++; + + return n; +} + +static void +oil_print_class (OilFunctionClass *klass, int verbose) +{ + int n_impls; + + n_impls = get_n_impls(klass); + + printf ("%-20s %d %-10g %-10g %-10.3g %s %s\n", klass->name, + n_impls, + klass->reference_impl->profile_ave, + klass->chosen_impl->profile_ave, + klass->reference_impl->profile_ave/klass->chosen_impl->profile_ave, + (klass->chosen_impl->flags & OIL_IMPL_FLAG_OPT)?"*":" ", + klass->chosen_impl->name + ); + +} + +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); + } +} + +static void +_debug_print_valist (int level, const char *file, const char *func, + int line, const char *format, va_list args) +{ + static const char *level_names[] = { "NONE", "ERROR", "WARNING", "INFO", + "DEBUG", "LOG" }; + const char *level_name = "unknown"; + + if (level > 3) return; + + if(level>=OIL_DEBUG_NONE && level<=OIL_DEBUG_LOG){ + level_name = level_names[level]; + } + + fprintf (stdout, "OIL: %s %s %d: %s(): ", level_name, file, line, func); + vfprintf (stdout, format, args); + fprintf (stdout, "\n"); +} + +int +main (int argc, char *argv[]) +{ + oil_debug_set_print_function (_debug_print_valist); + + oil_init(); + + oil_print_all (); + + return 0; +} + diff --git a/liboil/liboildebug.c b/liboil/liboildebug.c index 0510855..be62cc7 100644 --- a/liboil/liboildebug.c +++ b/liboil/liboildebug.c @@ -63,7 +63,6 @@ _oil_debug_init(void) _oil_debug_level = level; } } - _oil_debug_print_func = oil_debug_print_valist; OIL_INFO ("debug init"); } |