# HG changeset patch # User nickg # Date 1044013442 0 # Node ID fddb77989fbbf5ec71d6706087fb4c501902f165 # Parent 4ecc6abc8be24fc0706c993a1e600034f7b7d7d0 * cdl/kernel.cdl: * tests/fptest.c: Added this program to test interaction of FPU with multiple threads. diff --git a/packages/kernel/current/ChangeLog b/packages/kernel/current/ChangeLog --- a/packages/kernel/current/ChangeLog +++ b/packages/kernel/current/ChangeLog @@ -1,3 +1,9 @@ +2003-01-31 Nick Garnett + + * cdl/kernel.cdl: + * tests/fptest.c: Added this program to test interaction of FPU + with multiple threads. + 2003-01-30 Jonathan Larmour * src/common/thread.cxx: Fix potential warning and overflow with diff --git a/packages/kernel/current/cdl/kernel.cdl b/packages/kernel/current/cdl/kernel.cdl --- a/packages/kernel/current/cdl/kernel.cdl +++ b/packages/kernel/current/cdl/kernel.cdl @@ -326,7 +326,7 @@ cdl_package CYGPKG_KERNEL { no_define calculated { "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" - . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/tm_basic" : "") + . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/tm_basic tests/fptest" : "") . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") diff --git a/packages/kernel/current/tests/fptest.c b/packages/kernel/current/tests/fptest.c new file mode 100644 --- /dev/null +++ b/packages/kernel/current/tests/fptest.c @@ -0,0 +1,323 @@ +//========================================================================== +// +// fptest.cxx +// +// Basic FPU test +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2003 Nick Garnett +// +// eCos 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 or (at your option) any later version. +// +// eCos 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 eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg@calivar.com +// Contributors: nickg@calivar.com +// Date: 2003-01-27 +// Description: Simple FPU test. This is not very sophisticated as far +// as checking FPU performance or accuracy. It is more +// concerned with checking that several threads doing FP +// operations do not interfere with eachother's use of the +// FPU. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include + +#include + +#include + +#include +#include + +//#include +//#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================== + +#if defined(CYGFUN_KERNEL_API_C) && \ + defined(CYGSEM_KERNEL_SCHED_MLQUEUE) && \ + (CYGNUM_KERNEL_SCHED_PRIORITIES > 12) + +//========================================================================== +// Multiplier for loop counter. This allows us to tune the runtime of +// the whole program easily. The current value gives a runtime of +// about 90s on an 800Mz Pentium III. + +#define MULTIPLIER 100 + +//========================================================================== +// Thread parameters + +#define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_MINIMUM+4096) + +cyg_uint8 stacks[3][STACK_SIZE]; +cyg_handle_t thread[3]; +cyg_thread thread_struct[3]; + +//========================================================================== +// Random number generator. Ripped out of the C library. + +static int rand( unsigned int *seed ) +{ +// This is the code supplied in Knuth Vol 2 section 3.6 p.185 bottom + +#define RAND_MAX 0x7fffffff +#define MM 2147483647 // a Mersenne prime +#define AA 48271 // this does well in the spectral test +#define QQ 44488 // (long)(MM/AA) +#define RR 3399 // MM % AA; it is important that RR 12)\n"); +} + +#endif // CYGFUN_KERNEL_API_C, etc. + +//========================================================================== +// EOF fptest.cxx