diff options
Diffstat (limited to 'gcc-4.9/libgcc/config/arc/divtab-arc700.c')
-rw-r--r-- | gcc-4.9/libgcc/config/arc/divtab-arc700.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gcc-4.9/libgcc/config/arc/divtab-arc700.c b/gcc-4.9/libgcc/config/arc/divtab-arc700.c new file mode 100644 index 000000000..0074819d0 --- /dev/null +++ b/gcc-4.9/libgcc/config/arc/divtab-arc700.c @@ -0,0 +1,70 @@ +/* Copyright (C) 2004-2014 Free Software Foundation, Inc. + Contributor: Joern Rennecke <joern.rennecke@embecosm.com> + on behalf of Synopsys Inc. + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +/* Calculate division table for ARC700 integer division + Contributed by Joern Rennecke + joern.rennecke@arc.com */ + +#include <stdio.h> +#include <math.h> + +int +main () +{ + int i, j; + unsigned x; + double q, r, err, max_err = -1; + + puts("/* This table has been generated by divtab-arc700.c. */"); + puts("\ +/* 1/512 .. 1/256, normalized. There is a leading 1 in bit 31.\n\ + For powers of two, we list unnormalized numbers instead. The values\n\ + for powers of 2 are loaded, but not used. The value for 1 is actually\n\ + the first instruction after .Lmuldiv. */\n\ + .balign 4"); + puts (".Ldivtab:\n"); + for (i = 256; i >= 2; --i) + { + j = i < 0 ? -i : i; + if (j & (j-1)) + while (j < 128) + j += j; + else + /* Power of two. */ + j *= 128; + q = 4.*(1<<30)*128/j; + r = ceil (q); + printf ("\t.long\t0x%X\n", (unsigned) r); + err = r - q; + if (err > max_err) + max_err = err; + } +#if 0 + printf ("\t/* maximum error: %f */\n", max_err); +#endif + exit (0); +} |