diff -r e4d67989cc36 -r 47c74d1534e1 genericopenlibs/liboil/src/build_trampolines.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/liboil/src/build_trampolines.c Fri Apr 16 16:46:38 2010 +0300 @@ -0,0 +1,150 @@ +/* + * LIBOIL - Library of Optimized Inner Loops + * Copyright (c) 2004 David A. Schleef + * 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. + */ + + +#include +#include +#include +#include +#include + +#include + +static char * xstrdup (const char *s); + +void print_header (void); +void print_footer (void); + +int main (int argc, char *argv[]) +{ + OilFunctionClass *klass; + OilPrototype *proto; + int i; + int n; + char *string; + char *arg_string; + + oil_init_no_optimize (); + + print_header (); + + n = oil_class_get_n_classes (); + for (i=0;iprototype) { + proto = oil_prototype_from_string (klass->prototype); + if (proto) { + string = oil_prototype_to_string (proto); + if (strlen (string) == 0) { + free (string); + string = xstrdup("void"); + } + arg_string = oil_prototype_to_arg_string (proto); + + printf ("#undef oil_%s\n", klass->name); + printf ("void\n"); + printf ("oil_%s (%s)\n", klass->name, string); + printf ("{\n"); + printf (" if (_oil_function_class_%s.func == NULL) {\n", klass->name); + printf (" oil_class_optimize (&_oil_function_class_%s);\n", klass->name); + printf (" }\n"); + printf (" ((void (*)(%s))(_oil_function_class_%s.func))(%s);\n", + string, klass->name, arg_string); + printf ("}\n"); + printf ("\n"); + + oil_prototype_free (proto); + free (string); + free (arg_string); + } else { + printf("/* ERROR: could not parse %s(%s) */\n", klass->name, klass->prototype); + } + } + } + + print_footer (); + + return 0; +} + +void print_header (void) +{ + printf ("/*\n"); + printf (" * LIBOIL - Library of Optimized Inner Loops\n"); + printf (" * Copyright (c) 2004 David A. Schleef \n"); + printf (" * All rights reserved.\n"); + printf (" *\n"); + printf (" * Redistribution and use in source and binary forms, with or without\n"); + printf (" * modification, are permitted provided that the following conditions\n"); + printf (" * are met:\n"); + printf (" * 1. Redistributions of source code must retain the above copyright\n"); + printf (" * notice, this list of conditions and the following disclaimer.\n"); + printf (" * 2. Redistributions in binary form must reproduce the above copyright\n"); + printf (" * notice, this list of conditions and the following disclaimer in the\n"); + printf (" * documentation and/or other materials provided with the distribution.\n"); + printf (" * \n"); + printf (" * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n"); + printf (" * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n"); + printf (" * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"); + printf (" * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,\n"); + printf (" * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n"); + printf (" * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n"); + printf (" * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"); + printf (" * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n"); + printf (" * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n"); + printf (" * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n"); + printf (" * POSSIBILITY OF SUCH DAMAGE.\n"); + printf (" */\n"); + printf ("\n"); + printf ("/* This file is automatically generated. Do not edit. */\n"); + printf ("\n"); + printf ("#include \n"); + printf ("#include \n"); + printf ("#include \n"); + printf ("\n"); +} + +void print_footer (void) +{ + printf ("\n"); +} + +static char * +xstrdup (const char *s) +{ + int n = strlen(s); + char *t; + + n = strlen(s); + t = malloc(n + 1); + memcpy (t, s, n); + t[n] = 0; + + return t; +} +