annotate packages/kernel/current/tests/fpinttestf.c @ 3256:4d4c7b86b1c8

Add definitions of V2 specific commands, responses and card structure. [ Bugzilla 1001764 ]
author vae
date Mon, 01 Jul 2013 17:39:53 +0000
parents f35f92c0b860
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3216
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
1 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
2 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
3 // fpinttestf.c
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
4 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
5 // Basic FPU integrity test
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
6 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
7 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
8 // ####ECOSGPLCOPYRIGHTBEGIN####
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
9 // -------------------------------------------
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
11 // Copyright (C) 2012 Free Software Foundation, Inc.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
12 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
14 // the terms of the GNU General Public License as published by the Free
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
16 // version.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
17 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
21 // for more details.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
22 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
23 // You should have received a copy of the GNU General Public License
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
24 // along with eCos; if not, write to the Free Software Foundation, Inc.,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
26 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
27 // As a special exception, if other files instantiate templates or use
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
28 // macros or inline functions from this file, or you compile this file
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
29 // and link it with other works to produce a work based on this file,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
30 // this file does not by itself cause the resulting work to be covered by
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
31 // the GNU General Public License. However the source code for this file
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
32 // must still be made available in accordance with section (3) of the GNU
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
33 // General Public License v2.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
34 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
35 // This exception does not invalidate any other reasons why a work based
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
36 // on this file might be covered by the GNU General Public License.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
37 // -------------------------------------------
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
38 // ####ECOSGPLCOPYRIGHTEND####
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
39 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
40 //#####DESCRIPTIONBEGIN####
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
41 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
42 // Author(s): ilijak
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
43 // Original code: nickg@calivar.com
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
44 // Contributors:
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
45 // Date: 2012-12-18
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
46 // Description: Simple FPU test with a mix of threads that do and do not use
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
47 // floating point.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
48 // This is a modification of the original FPU test, and presents
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
49 // both "integer" and "float" threads in order to enforce LAZY
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
50 // context switching. Single precision floating point is used.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
51 // This is not very sophisticated as far
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
52 // as checking FPU performance or accuracy. It is more
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
53 // concerned with checking that several threads doing FP
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
54 // operations do not interfere with eachother's use of the
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
55 // FPU.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
56 // Note: NONE context switching scheme should NOT pass this test with
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
57 // multiple FP threads. Look for fpinttestf1.c instead.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
58 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
59 //####DESCRIPTIONEND####
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
60 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
61
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
62 #include <pkgconf/kernel.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
63 #include <pkgconf/hal.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
64
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
65 #include <cyg/hal/hal_arch.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
66
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
67 #include <cyg/kernel/kapi.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
68
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
69 #include <cyg/infra/testcase.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
70 #include <cyg/infra/diag.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
71
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
72 #include <cyg/kernel/test/stackmon.h>
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
73 #include CYGHWR_MEMORY_LAYOUT_H
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
74
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
75 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
76
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
77 #ifndef FP_THREADS_N
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
78 #define FP_THREADS_N 3
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
79 #define FP_TEST_NAME "FP test"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
80 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
81
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
82 #if defined(CYGFUN_KERNEL_API_C) && \
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
83 defined(CYGSEM_KERNEL_SCHED_MLQUEUE) && \
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
84 (CYGNUM_KERNEL_SCHED_PRIORITIES > 12) && \
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
85 (CYGMEM_REGION_ram_SIZE >= (49152-4096)) && \
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
86 (!defined(CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST) || (FP_THREADS_N == 1))
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
87
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
88 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
89 // Base priority for all threads.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
90
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
91 #define BASE_PRI 5
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
92
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
93 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
94 // Runtime
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
95 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
96 // This is the number of ticks that the program will run for. 3000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
97 // ticks is equal to 30 seconds in the default configuration. For
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
98 // simulators we reduce the run time to 3 simulated seconds.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
99
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
100 #define RUN_TICKS 3000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
101 #define RUN_TICKS_SIM 300
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
102
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
103 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
104 // Thread parameters
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
105
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
106 #define STACK_SIZE CYGNUM_HAL_STACK_SIZE_MINIMUM
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
107 #define THREADS_N 8
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
108 static cyg_uint8 stacks[THREADS_N][STACK_SIZE] CYGBLD_ATTRIB_ALIGN_MAX;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
109 static cyg_handle_t thread[THREADS_N];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
110 static cyg_thread thread_struct[THREADS_N];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
111 static unsigned long iter_n[THREADS_N];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
112
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
113 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
114 // Alarm parameters.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
115
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
116 static cyg_alarm alarm_struct;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
117 static cyg_handle_t alarm;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
118
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
119 static cyg_count8 cur_thread = 0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
120 static cyg_count32 alarm_ticks = 0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
121 static cyg_count32 run_ticks = RUN_TICKS;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
122
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
123 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
124
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
125 static int errors = 0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
126
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
127 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
128 // Random number generator. Ripped out of the C library.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
129
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
130 static int CYGBLD_ATTRIB_NO_INLINE rand( unsigned int *seed )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
131 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
132 // This is the code supplied in Knuth Vol 2 section 3.6 p.185 bottom
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
133
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
134 #define RAND_MAX 0x7fffffff
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
135 #define MM 2147483647 // a Mersenne prime
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
136 #define AA 48271 // this does well in the spectral test
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
137 #define QQ 44488 // (long)(MM/AA)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
138 #define RR 3399 // MM % AA; it is important that RR<QQ
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
139
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
140 *seed = AA*(*seed % QQ) - RR*(unsigned int)(*seed/QQ);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
141 if (*seed < 0)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
142 *seed += MM;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
143
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
144 return (int)( *seed & RAND_MAX );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
145 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
146
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
147
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
148 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
149 // Test calculation.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
150 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
151 // Generates an array of random FP values and then repeatedly applies
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
152 // a calculation to them and checks that the same result is reached
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
153 // each time. The calculation, in the macro CALC, is intended to make
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
154 // maximum use of the FPU registers. However, the i386 compiler
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
155 // doesn't let this expression get very complex before it starts
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
156 // spilling values out to memory.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
157
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
158 static void do_test( float *values,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
159 int count,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
160 int loops,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
161 int test,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
162 const char *name)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
163 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
164 unsigned int i, j;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
165 // volatiles necessary to force
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
166 // values to 32 bits for comparison
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
167 volatile float sum = 1.0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
168 volatile float last_sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
169 unsigned int seed;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
170
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
171 cyg_uint32 iter = 0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
172 int thread_i = name[__builtin_strlen(name)-1]-'1';
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
173
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
174 #define V(__i) (values[(__i)%count])
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
175 #define CALC ((V(i-1)*V(i+1))*(V(i-2)*V(i+2))*(V(i-3)*sum))
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
176
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
177 seed = ((unsigned int)&i)*count;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
178
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
179 // Set up an array of values...
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
180 for( i = 0; i < count; i++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
181 values[i] = (float)rand( &seed )/(float)0x7fffffff;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
182
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
183 // Now calculate something from them...
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
184 for( i = 0; i < count; i++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
185 sum += CALC;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
186
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
187 last_sum = sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
188
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
189 // Now recalculate the sum in a loop and look for errors
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
190 for( j = 0; j < loops ; j++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
191 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
192 iter++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
193 if(thread_i < 3)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
194 iter_n[thread_i]++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
195 sum = 1.0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
196 for( i = 0; i < count; i++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
197 sum += CALC;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
198
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
199 if( sum != last_sum )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
200 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
201 union float_int_union {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
202 float d;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
203 cyg_uint32 i;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
204 } diu_sum, diu_lastsum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
205
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
206 diu_sum.d = sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
207 diu_lastsum.d = last_sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
208
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
209 errors++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
210 if (sizeof(float) != sizeof(cyg_uint32)) {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
211 diag_printf("Warning: sizeof(float) != sizeof(cyg_uint32), therefore next line may\n"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
212 "have invalid sum/last_sum values\n");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
213 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
214 diag_printf("%s: Sum mismatch! %d sum=[%08x] last_sum=[%08x]\n",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
215 name,j, diu_sum.i, diu_lastsum.i );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
216
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
217 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
218 #if 0
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
219 if( ((j*count)%1000000) == 0 )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
220 diag_printf("INFO:<%s: %2d calculations done>\n",name,j*count);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
221 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
222 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
223 #if 0
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
224 if(thread_i < 3)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
225 diag_printf("INFO:<%s [%d]: %2d calculations done>\n",name,thread_i,j*count);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
226 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
227 if(thread_i < 3)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
228 iter_n[thread_i] = iter;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
229 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
230
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
231
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
232 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
233 // Test calculation.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
234 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
235 // Generates an array of random integer values and then repeatedly applies
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
236 // a calculation to them and checks that the same result is reached
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
237 // each time.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
238
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
239 static void do_int_test( int *values,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
240 int count,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
241 int loops,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
242 int test,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
243 const char *name)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
244 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
245 unsigned int i, j;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
246 // volatiles necessary to force
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
247 // values to 32 bits for comparison
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
248 volatile int sum = 1;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
249 volatile int last_sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
250 unsigned int seed;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
251 #if 0
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
252 cyg_uint32 ctrlreg;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
253 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
254 cyg_uint32 iter = 0;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
255 int thread_i = name[__builtin_strlen(name)-1]-'1';
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
256
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
257 #define VI(__i) (values[(__i)%count])
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
258 #define CALCI ((VI(i-1)*VI(i+1))*(VI(i-2)*VI(i+2))*(VI(i-3)*sum))
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
259
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
260 seed = ((unsigned int)&i)*count;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
261
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
262 // Set up an array of values...
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
263 for( i = 0; i < count; i++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
264 values[i] = rand( &seed );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
265
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
266 // Now calculate something from them...
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
267 for( i = 0; i < count; i++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
268 sum += CALC;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
269
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
270 last_sum = sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
271
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
272 // Now recalculate the sum in a loop and look for errors
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
273 for( j = 0; j < loops ; j++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
274 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
275 iter++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
276 if(thread_i < 8)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
277 iter_n[thread_i]++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
278 sum = 1;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
279 for( i = 0; i < count; i++ )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
280 sum += CALC;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
281
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
282 if( sum != last_sum )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
283 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
284 errors++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
285 diag_printf("%s: Sum mismatch! %d sum=[%08x] last_sum=[%08x]\n",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
286 name,j, sum, last_sum );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
287 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
288 #if 0
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
289 CYGARC_MRS(ctrlreg, control);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
290 if(ctrlreg & 0x04){
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
291 diag_printf("%s: control = 0x%08x\n", name, ctrlreg);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
292 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
293 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
294 #if 0
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
295 if( ((j*count)%1000000) == 0 )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
296 diag_printf("INFO:<%s: %2d calculations done>\n",name,j*count);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
297 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
298 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
299 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
300
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
301 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
302 // Alarm handler
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
303 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
304 // This is called every tick. It lowers the priority of the currently
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
305 // running thread and raises the priority of the next. Thus we
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
306 // implement a form of timelslicing between the threads at one tick
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
307 // granularity.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
308
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
309 static void alarm_fn(cyg_handle_t alarm, cyg_addrword_t data)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
310 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
311 alarm_ticks++;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
312 unsigned long iter_sum;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
313
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
314 if( alarm_ticks >= run_ticks )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
315 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
316 if( errors )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
317 CYG_TEST_FAIL("Errors detected");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
318 else
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
319 CYG_TEST_PASS("OK");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
320
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
321 iter_sum = + iter_n[0] + iter_n[1] + iter_n[2] + iter_n[3]+ iter_n[4] + iter_n[5]+ iter_n[6] + iter_n[7];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
322 diag_printf("Iterations = %lu+%lu+%lu+%lu+%lu+%lu+%lu+%lu",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
323 iter_n[0], iter_n[1], iter_n[2], iter_n[3], iter_n[4], iter_n[5], iter_n[6], iter_n[7]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
324 diag_printf("=%lu\n", iter_sum);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
325 CYG_TEST_FINISH("FP Test done");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
326 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
327 else
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
328 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
329 cyg_thread_set_priority( thread[cur_thread], BASE_PRI );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
330
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
331 cur_thread = (cur_thread+1)%8;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
332
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
333 cyg_thread_set_priority( thread[cur_thread], BASE_PRI-1 );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
334 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
335 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
336
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
337
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
338 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
339 // Floating point threads
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
340 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
341 #define FP1_COUNT 1000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
342
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
343 static float fpt1_values[FP1_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
344
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
345 void fptest1( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
346 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
347 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
348 do_test( fpt1_values, FP1_COUNT, 2000000000, id, "fptest1" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
349 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
350
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
351 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
352 #if (CYGMEM_REGION_ram_SIZE / 8 / 2) < 10000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
353 #define FP2_COUNT (CYGMEM_REGION_ram_SIZE / 8 / 2)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
354 #else
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
355 #define FP2_COUNT 10000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
356 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
357
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
358 static float fpt2_values[FP2_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
359
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
360 void fptest2( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
361 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
362 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
363 do_test( fpt2_values, FP2_COUNT, 2000000000, id, "fptest2" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
364 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
365
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
366 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
367
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
368 #define FP3_COUNT 100
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
369
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
370 static float fpt3_values[FP3_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
371
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
372 void fptest3( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
373 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
374 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
375 do_test( fpt3_values, FP3_COUNT, 2000000000, id, "fptest3" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
376 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
377
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
378 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
379 // Integral threads
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
380 //
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
381
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
382 #define INT1_COUNT 1000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
383
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
384 static int int1_values[INT1_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
385
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
386 void inttest4( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
387 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
388 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
389 do_int_test( int1_values, INT1_COUNT, 2000000000, id, "inttest4" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
390 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
391
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
392 #define INT2_COUNT 1000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
393
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
394 static int int2_values[INT2_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
395
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
396 void inttest5( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
397 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
398 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
399 do_int_test( int2_values, INT2_COUNT, 2000000000, id, "inttest5" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
400 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
401
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
402 #define INT3_COUNT 1000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
403
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
404 static int int3_values[INT3_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
405
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
406 void inttest6( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
407 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
408 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
409 do_int_test( int3_values, INT3_COUNT, 2000000000, id, "inttest6" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
410 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
411
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
412
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
413 #define INT4_COUNT 1000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
414
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
415 static int int4_values[INT4_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
416
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
417 void inttest7( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
418 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
419 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
420 do_int_test( int4_values, INT4_COUNT, 2000000000, id, "inttest7" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
421 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
422
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
423 #define INT5_COUNT 1000
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
424
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
425 static int int5_values[INT5_COUNT];
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
426
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
427 void inttest8( CYG_ADDRWORD id )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
428 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
429 while(1)
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
430 do_int_test( int5_values, INT5_COUNT, 2000000000, id, "inttest8" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
431 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
432
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
433 //======================================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
434 // Main
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
435
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
436 void fptest_main( void )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
437 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
438 CYG_TEST_INIT();
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
439
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
440 if( cyg_test_is_simulator )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
441 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
442 run_ticks = RUN_TICKS_SIM;
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
443 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
444 CYG_TEST_INFO("Run fptest in cyg_start");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
445 do_test( fpt3_values, FP3_COUNT, 1000, 0, "start" );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
446 CYG_TEST_INFO( "cyg_start run done");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
447
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
448 cyg_thread_create( BASE_PRI-1,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
449 fptest1,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
450 0,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
451 "fptest1",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
452 &stacks[0][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
453 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
454 &thread[0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
455 &thread_struct[0]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
456 #if FP_THREADS_N > 0
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
457 cyg_thread_resume( thread[0] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
458 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
459 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
460 fptest2,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
461 1,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
462 "fptest2",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
463 &stacks[1][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
464 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
465 &thread[1],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
466 &thread_struct[1]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
467
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
468 #if FP_THREADS_N > 1
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
469 cyg_thread_resume( thread[1] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
470 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
471 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
472 fptest3,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
473 2,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
474 "fptest3",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
475 &stacks[2][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
476 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
477 &thread[2],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
478 &thread_struct[2]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
479
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
480 #if FP_THREADS_N > 2
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
481 cyg_thread_resume( thread[2] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
482 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
483
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
484 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
485 inttest4,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
486 3,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
487 "inttest4",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
488 &stacks[3][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
489 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
490 &thread[3],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
491 &thread_struct[3]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
492
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
493 cyg_thread_resume( thread[3] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
494
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
495 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
496 inttest5,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
497 4,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
498 "inttest5",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
499 &stacks[4][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
500 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
501 &thread[4],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
502 &thread_struct[4]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
503
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
504 cyg_thread_resume( thread[4] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
505
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
506 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
507 inttest6,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
508 5,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
509 "inttest6",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
510 &stacks[5][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
511 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
512 &thread[5],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
513 &thread_struct[5]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
514
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
515 cyg_thread_resume( thread[5] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
516
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
517 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
518 inttest7,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
519 6,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
520 "inttest7",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
521 &stacks[6][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
522 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
523 &thread[6],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
524 &thread_struct[6]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
525
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
526 cyg_thread_resume( thread[6] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
527
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
528 cyg_thread_create( BASE_PRI,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
529 inttest8,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
530 7,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
531 "inttest8",
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
532 &stacks[7][0],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
533 STACK_SIZE,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
534 &thread[7],
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
535 &thread_struct[7]);
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
536
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
537 cyg_thread_resume( thread[7] );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
538
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
539 cyg_alarm_create( cyg_real_time_clock(),
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
540 alarm_fn,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
541 0,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
542 &alarm,
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
543 &alarm_struct );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
544
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
545 cyg_alarm_initialize( alarm, cyg_current_time()+1, 1 );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
546
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
547 cyg_scheduler_start();
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
548
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
549 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
550
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
551 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
552
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
553 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
554 externC void
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
555 cyg_hal_invoke_constructors();
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
556 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
557
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
558 externC void
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
559 cyg_start( void )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
560 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
561 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
562 cyg_hal_invoke_constructors();
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
563 #endif
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
564 fptest_main();
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
565 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
566
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
567 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
568
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
569 #else // CYGFUN_KERNEL_API_C...
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
570
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
571 externC void
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
572 cyg_start( void )
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
573 {
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
574 CYG_TEST_INIT();
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
575 CYG_TEST_INFO(FP_TEST_NAME " requires:\n"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
576 "CYGFUN_KERNEL_API_C && \n"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
577 "CYGSEM_KERNEL_SCHED_MLQUEUE && \n"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
578 "(CYGNUM_KERNEL_SCHED_PRIORITIES > 12) &&\n"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
579 "(CYGMEM_REGION_ram_SIZE >= (49152-4096)) &&\n"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
580 "(!defined(CYGHWR_HAL_CORTEXM_FPU_SWITCH_NONE) || (FP_THREADS_N == 1))"
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
581 );
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
582 CYG_TEST_NA("FP test requirements");
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
583 }
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
584
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
585 #endif // CYGFUN_KERNEL_API_C, etc.
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
586
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
587 //==========================================================================
f35f92c0b860 Add single precision floating point tests.
vae
parents:
diff changeset
588 // EOF fpinttestf.c