diff options
Diffstat (limited to 'post/lib_ppc/fpu')
-rw-r--r-- | post/lib_ppc/fpu/20001122-1.c | 61 | ||||
-rw-r--r-- | post/lib_ppc/fpu/20010114-2.c | 65 | ||||
-rw-r--r-- | post/lib_ppc/fpu/20010226-1.c | 53 | ||||
-rw-r--r-- | post/lib_ppc/fpu/980619-1.c | 59 | ||||
-rw-r--r-- | post/lib_ppc/fpu/Makefile | 33 | ||||
-rw-r--r-- | post/lib_ppc/fpu/acc1.c | 56 | ||||
-rw-r--r-- | post/lib_ppc/fpu/compare-fp-1.c | 224 | ||||
-rw-r--r-- | post/lib_ppc/fpu/fpu.c | 91 | ||||
-rw-r--r-- | post/lib_ppc/fpu/mul-subnormal-single-1.c | 102 |
9 files changed, 0 insertions, 744 deletions
diff --git a/post/lib_ppc/fpu/20001122-1.c b/post/lib_ppc/fpu/20001122-1.c deleted file mode 100644 index bef80c5f79..0000000000 --- a/post/lib_ppc/fpu/20001122-1.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * This file is originally a part of the GCC testsuite. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -int fpu_post_test_math1 (void) -{ - volatile double a, *p; - double c, d; - volatile double b; - - d = 1.0; - p = &b; - - do - { - c = d; - d = c * 0.5; - b = 1 + d; - } while (b != 1.0); - - a = 1.0 + c; - - if (a == 1.0) { - post_log ("Error in FPU math1 test\n"); - return -1; - } - - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/20010114-2.c b/post/lib_ppc/fpu/20010114-2.c deleted file mode 100644 index ee564e8d62..0000000000 --- a/post/lib_ppc/fpu/20010114-2.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * This file is originally a part of the GCC testsuite. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -static float rintf (float x) -{ - volatile float TWO23 = 8388608.0; - - if (__builtin_fabs (x) < TWO23) - { - if (x > 0.0) - { - x += TWO23; - x -= TWO23; - } - else if (x < 0.0) - { - x = TWO23 - x; - x = -(x - TWO23); - } - } - - return x; -} - -int fpu_post_test_math2 (void) -{ - if (rintf (-1.5) != -2.0) { - post_log ("Error in FPU math2 test\n"); - return -1; - } - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/20010226-1.c b/post/lib_ppc/fpu/20010226-1.c deleted file mode 100644 index 099ca4a64f..0000000000 --- a/post/lib_ppc/fpu/20010226-1.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * This file is originally a part of the GCC testsuite. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -int fpu_post_test_math3 (void) -{ - volatile long double dfrom = 1.1; - volatile long double m1; - volatile long double m2; - volatile unsigned long mant_long; - - m1 = dfrom / 2.0; - m2 = m1 * 4294967296.0; - mant_long = ((unsigned long) m2) & 0xffffffff; - - if (mant_long != 0x8ccccccc) { - post_log ("Error in FPU math3 test\n"); - return -1; - } - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/980619-1.c b/post/lib_ppc/fpu/980619-1.c deleted file mode 100644 index 46a31aec45..0000000000 --- a/post/lib_ppc/fpu/980619-1.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * This file is originally a part of the GCC testsuite. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -int fpu_post_test_math4 (void) -{ - volatile float reale = 1.0f; - volatile float oneplus; - int i; - - if (sizeof (float) != 4) - return 0; - - for (i = 0; ; i++) - { - oneplus = 1.0f + reale; - if (oneplus == 1.0f) - break; - reale = reale / 2.0f; - } - /* Assumes ieee754 accurate arithmetic above. */ - if (i != 24) { - post_log ("Error in FPU math4 test\n"); - return -1; - } - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/Makefile b/post/lib_ppc/fpu/Makefile deleted file mode 100644 index a6815398e5..0000000000 --- a/post/lib_ppc/fpu/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# -# (C) Copyright 2007 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# See file CREDITS for list of people who contributed to this -# project. -# -# This program 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 2 of -# the License, or (at your option) any later version. -# -# This program 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; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, -# MA 02111-1307 USA -# -include $(TOPDIR)/config.mk - -LIB = libpostppcfpu.a - -COBJS-$(CONFIG_HAS_POST) += fpu.o 20001122-1.o 20010114-2.o 20010226-1.o 980619-1.o -COBJS-$(CONFIG_HAS_POST) += acc1.o compare-fp-1.o mul-subnormal-single-1.o - -include $(TOPDIR)/post/rules.mk - -CFLAGS := $(shell echo $(CFLAGS) | sed s/-msoft-float//) -CFLAGS += -mhard-float -fkeep-inline-functions diff --git a/post/lib_ppc/fpu/acc1.c b/post/lib_ppc/fpu/acc1.c deleted file mode 100644 index 9fca9b3788..0000000000 --- a/post/lib_ppc/fpu/acc1.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * This file is originally a part of the GCC testsuite. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -static double func (const double *array) -{ - double d = *array; - - if (d == 0.0) - return d; - else - return d + func (array + 1); -} - -int fpu_post_test_math5 (void) -{ - double values[] = { 0.1e-100, 1.0, -1.0, 0.0 }; - - if (func (values) != 0.1e-100) { - post_log ("Error in FPU math5 test\n"); - return -1; - } - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/compare-fp-1.c b/post/lib_ppc/fpu/compare-fp-1.c deleted file mode 100644 index f836b29c08..0000000000 --- a/post/lib_ppc/fpu/compare-fp-1.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * Test for correctness of composite floating-point comparisons. - * Written by Paolo Bonzini, 26th May 2004. - * This file is originally a part of the GCC testsuite. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -static int failed; - -#define TEST(c) if ((c) != ok) failed++ -#define ORD(a, b) (!__builtin_isunordered ((a), (b))) -#define UNORD(a, b) (__builtin_isunordered ((a), (b))) -#define UNEQ(a, b) (__builtin_isunordered ((a), (b)) || ((a) == (b))) -#define UNLT(a, b) (__builtin_isunordered ((a), (b)) || ((a) < (b))) -#define UNLE(a, b) (__builtin_isunordered ((a), (b)) || ((a) <= (b))) -#define UNGT(a, b) (__builtin_isunordered ((a), (b)) || ((a) > (b))) -#define UNGE(a, b) (__builtin_isunordered ((a), (b)) || ((a) >= (b))) -#define LTGT(a, b) (__builtin_islessgreater ((a), (b))) - -static float pinf; -static float ninf; -static float NaN; - -static void iuneq (float x, float y, int ok) -{ - TEST (UNEQ (x, y)); - TEST (!LTGT (x, y)); - TEST (UNLE (x, y) && UNGE (x,y)); -} - -static void ieq (float x, float y, int ok) -{ - TEST (ORD (x, y) && UNEQ (x, y)); -} - -static void iltgt (float x, float y, int ok) -{ - TEST (!UNEQ (x, y)); /* Not optimizable. */ - TEST (LTGT (x, y)); /* Same, __builtin_islessgreater does not trap. */ - TEST (ORD (x, y) && (UNLT (x, y) || UNGT (x,y))); -} - -static void ine (float x, float y, int ok) -{ - TEST (UNLT (x, y) || UNGT (x, y)); -} - -static void iunlt (float x, float y, int ok) -{ - TEST (UNLT (x, y)); - TEST (UNORD (x, y) || (x < y)); -} - -static void ilt (float x, float y, int ok) -{ - TEST (ORD (x, y) && UNLT (x, y)); /* Not optimized */ - TEST ((x <= y) && (x != y)); - TEST ((x <= y) && (y != x)); - TEST ((x != y) && (x <= y)); /* Not optimized */ - TEST ((y != x) && (x <= y)); /* Not optimized */ -} - -static void iunle (float x, float y, int ok) -{ - TEST (UNLE (x, y)); - TEST (UNORD (x, y) || (x <= y)); -} - -static void ile (float x, float y, int ok) -{ - TEST (ORD (x, y) && UNLE (x, y)); /* Not optimized */ - TEST ((x < y) || (x == y)); - TEST ((y > x) || (x == y)); - TEST ((x == y) || (x < y)); /* Not optimized */ - TEST ((y == x) || (x < y)); /* Not optimized */ -} - -static void iungt (float x, float y, int ok) -{ - TEST (UNGT (x, y)); - TEST (UNORD (x, y) || (x > y)); -} - -static void igt (float x, float y, int ok) -{ - TEST (ORD (x, y) && UNGT (x, y)); /* Not optimized */ - TEST ((x >= y) && (x != y)); - TEST ((x >= y) && (y != x)); - TEST ((x != y) && (x >= y)); /* Not optimized */ - TEST ((y != x) && (x >= y)); /* Not optimized */ -} - -static void iunge (float x, float y, int ok) -{ - TEST (UNGE (x, y)); - TEST (UNORD (x, y) || (x >= y)); -} - -static void ige (float x, float y, int ok) -{ - TEST (ORD (x, y) && UNGE (x, y)); /* Not optimized */ - TEST ((x > y) || (x == y)); - TEST ((y < x) || (x == y)); - TEST ((x == y) || (x > y)); /* Not optimized */ - TEST ((y == x) || (x > y)); /* Not optimized */ -} - -int fpu_post_test_math6 (void) -{ - pinf = __builtin_inf (); - ninf = -__builtin_inf (); - NaN = __builtin_nan (""); - - iuneq (ninf, pinf, 0); - iuneq (NaN, NaN, 1); - iuneq (pinf, ninf, 0); - iuneq (1, 4, 0); - iuneq (3, 3, 1); - iuneq (5, 2, 0); - - ieq (1, 4, 0); - ieq (3, 3, 1); - ieq (5, 2, 0); - - iltgt (ninf, pinf, 1); - iltgt (NaN, NaN, 0); - iltgt (pinf, ninf, 1); - iltgt (1, 4, 1); - iltgt (3, 3, 0); - iltgt (5, 2, 1); - - ine (1, 4, 1); - ine (3, 3, 0); - ine (5, 2, 1); - - iunlt (NaN, ninf, 1); - iunlt (pinf, NaN, 1); - iunlt (pinf, ninf, 0); - iunlt (pinf, pinf, 0); - iunlt (ninf, ninf, 0); - iunlt (1, 4, 1); - iunlt (3, 3, 0); - iunlt (5, 2, 0); - - ilt (1, 4, 1); - ilt (3, 3, 0); - ilt (5, 2, 0); - - iunle (NaN, ninf, 1); - iunle (pinf, NaN, 1); - iunle (pinf, ninf, 0); - iunle (pinf, pinf, 1); - iunle (ninf, ninf, 1); - iunle (1, 4, 1); - iunle (3, 3, 1); - iunle (5, 2, 0); - - ile (1, 4, 1); - ile (3, 3, 1); - ile (5, 2, 0); - - iungt (NaN, ninf, 1); - iungt (pinf, NaN, 1); - iungt (pinf, ninf, 1); - iungt (pinf, pinf, 0); - iungt (ninf, ninf, 0); - iungt (1, 4, 0); - iungt (3, 3, 0); - iungt (5, 2, 1); - - igt (1, 4, 0); - igt (3, 3, 0); - igt (5, 2, 1); - - iunge (NaN, ninf, 1); - iunge (pinf, NaN, 1); - iunge (ninf, pinf, 0); - iunge (pinf, pinf, 1); - iunge (ninf, ninf, 1); - iunge (1, 4, 0); - iunge (3, 3, 1); - iunge (5, 2, 1); - - ige (1, 4, 0); - ige (3, 3, 1); - ige (5, 2, 1); - - if (failed) { - post_log ("Error in FPU math6 test\n"); - return -1; - } - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/fpu.c b/post/lib_ppc/fpu/fpu.c deleted file mode 100644 index 3f3adea197..0000000000 --- a/post/lib_ppc/fpu/fpu.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * Author: Sergei Poselenov <sposelenov@emcraft.com> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include <common.h> - -/* - * FPU test - * - * This test checks the arithmetic logic unit (ALU) of CPU. - * It tests independently various groups of instructions using - * run-time modification of the code to reduce the memory footprint. - * For more details refer to post/cpu/ *.c files. - */ - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -#include <watchdog.h> - -GNU_FPOST_ATTR - -extern int fpu_status (void); -extern void fpu_enable (void); -extern void fpu_disable (void); - -extern int fpu_post_test_math1 (void); -extern int fpu_post_test_math2 (void); -extern int fpu_post_test_math3 (void); -extern int fpu_post_test_math4 (void); -extern int fpu_post_test_math5 (void); -extern int fpu_post_test_math6 (void); -extern int fpu_post_test_math7 (void); - -int fpu_post_test (int flags) -{ - int fpu = fpu_status (); - - int ret = 0; - - WATCHDOG_RESET (); - - if (!fpu) - fpu_enable (); - - if (ret == 0) - ret = fpu_post_test_math1 (); - if (ret == 0) - ret = fpu_post_test_math2 (); - if (ret == 0) - ret = fpu_post_test_math3 (); - if (ret == 0) - ret = fpu_post_test_math4 (); - if (ret == 0) - ret = fpu_post_test_math5 (); - if (ret == 0) - ret = fpu_post_test_math6 (); - if (ret == 0) - ret = fpu_post_test_math7 (); - - if (!fpu) - fpu_disable (); - - WATCHDOG_RESET (); - - return ret; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ diff --git a/post/lib_ppc/fpu/mul-subnormal-single-1.c b/post/lib_ppc/fpu/mul-subnormal-single-1.c deleted file mode 100644 index 1f3732d924..0000000000 --- a/post/lib_ppc/fpu/mul-subnormal-single-1.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2007 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/* - * This file is originally a part of the GCC testsuite. - * Check that certain subnormal numbers (formerly known as denormalized - * numbers) are rounded to within 0.5 ulp. PR other/14354. - */ - -#include <common.h> - -#include <post.h> - -#if CONFIG_POST & CONFIG_SYS_POST_FPU - -GNU_FPOST_ATTR - -union uf -{ - unsigned int u; - float f; -}; - -static float -u2f (unsigned int v) -{ - union uf u; - u.u = v; - return u.f; -} - -static unsigned int -f2u (float v) -{ - union uf u; - u.f = v; - return u.u; -} - -static int ok = 1; - -static void -tstmul (unsigned int ux, unsigned int uy, unsigned int ur) -{ - float x = u2f (ux); - float y = u2f (uy); - - if (f2u (x * y) != ur) - /* Set a variable rather than aborting here, to simplify tracing when - several computations are wrong. */ - ok = 0; -} - -/* We don't want to make this const and static, or else we risk inlining - causing the test to fold as constants at compile-time. */ -struct -{ - unsigned int p1, p2, res; -} static volatile expected[] = -{ - {0xfff, 0x3f800400, 0xfff}, - {0xf, 0x3fc88888, 0x17}, - {0xf, 0x3f844444, 0xf} -}; - -int fpu_post_test_math7 (void) -{ - unsigned int i; - - for (i = 0; i < sizeof (expected) / sizeof (expected[0]); i++) - { - tstmul (expected[i].p1, expected[i].p2, expected[i].res); - tstmul (expected[i].p2, expected[i].p1, expected[i].res); - } - - if (!ok) { - post_log ("Error in FPU math7 test\n"); - return -1; - } - return 0; -} - -#endif /* CONFIG_POST & CONFIG_SYS_POST_FPU */ |