2 * Valgrind testcase for PowerPC ISA 3.1
4 * Copyright (C) 2019-2020 Will Schmidt <will_schmidt@vnet.ibm.com>
7 * gcc -Winline -Wall -g -O -mregnames -maltivec -m64
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of the
14 * License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
40 /* Condition Register fields.
41 These are used to capture the condition register values immediately after
42 the instruction under test is executed. This is done to help prevent other
43 test overhead (switch statements, result compares, etc) from disturbing
44 the test case results. */
45 unsigned long current_cr
;
46 unsigned long current_fpscr
;
48 struct test_list_t current_test
;
50 #include "isa_3_1_helpers.h"
52 static void test_plxvp_off0_R1 (void) {
54 __asm__
__volatile__ ("plxvp 20, +0(0),1" );
57 static void test_plxvp_off8_R1 (void) {
59 __asm__
__volatile__ ("plxvp 20, +8(0),1" );
62 static void test_plxvp_off16_R1 (void) {
64 __asm__
__volatile__ ("plxvp 20, +16(0),1" );
67 static void test_plxvp_off24_R1 (void) {
69 __asm__
__volatile__ ("plxvp 20, +24(0),1" );
72 static void test_plxvp_off32_R1 (void) {
74 __asm__
__volatile__ ("plxvp 20, +32(0),1" );
77 static void test_plbz_off0_R1 (void) {
79 __asm__
__volatile__ ("plbz %0, +0(0), 1" : "=r" (rt
) );
82 static void test_plbz_off8_R1 (void) {
84 __asm__
__volatile__ ("plbz %0, +8(0), 1" : "=r" (rt
) );
87 static void test_plbz_off16_R1 (void) {
89 __asm__
__volatile__ ("plbz %0, +16(0), 1" : "=r" (rt
) );
92 static void test_plbz_off32_R1 (void) {
94 __asm__
__volatile__ ("plbz %0, +32(0), 1" : "=r" (rt
) );
97 static void test_plbz_off64_R1 (void) {
99 __asm__
__volatile__ ("plbz %0, +64(0), 1" : "=r" (rt
) );
103 static void test_plhz_off0_R1 (void) {
105 __asm__
__volatile__ ("plhz %0, +0(0), 1" : "=r" (rt
) );
108 static void test_plhz_off8_R1 (void) {
110 __asm__
__volatile__ ("plhz %0, +8(0), 1" : "=r" (rt
) );
113 static void test_plhz_off16_R1 (void) {
115 __asm__
__volatile__ ("plhz %0, +16(0), 1" : "=r" (rt
) );
118 static void test_plhz_off32_R1 (void) {
120 __asm__
__volatile__ ("plhz %0, +32(0), 1" : "=r" (rt
) );
123 static void test_plhz_off64_R1 (void) {
125 __asm__
__volatile__ ("plhz %0, +64(0), 1" : "=r" (rt
) );
129 static void test_plha_off0_R1 (void) {
131 __asm__
__volatile__ ("plha %0, +0(0), 1" : "=r" (rt
) );
134 static void test_plha_off8_R1 (void) {
136 __asm__
__volatile__ ("plha %0, +8(0), 1" : "=r" (rt
) );
139 static void test_plha_off16_R1 (void) {
141 __asm__
__volatile__ ("plha %0, +16(0), 1" : "=r" (rt
) );
144 static void test_plha_off32_R1 (void) {
146 __asm__
__volatile__ ("plha %0, +32(0), 1" : "=r" (rt
) );
149 static void test_plha_off64_R1 (void) {
151 __asm__
__volatile__ ("plha %0, +64(0), 1" : "=r" (rt
) );
155 static void test_plwz_off0_R1 (void) {
156 __asm__
__volatile__ ("plwz %0, +0(0), 1" : "=r" (rt
) );
158 static void test_plwz_off8_R1 (void) {
159 __asm__
__volatile__ ("plwz %0, +8(0), 1" : "=r" (rt
) );
161 static void test_plwz_off16_R1 (void) {
162 __asm__
__volatile__ ("plwz %0, +16(0), 1" : "=r" (rt
) );
164 static void test_plwz_off32_R1 (void) {
166 __asm__
__volatile__ ("plwz %0, +32(0), 1" : "=r" (rt
) );
169 static void test_plwz_off64_R1 (void) {
171 __asm__
__volatile__ ("plwz %0, +64(0), 1" : "=r" (rt
) );
175 static void test_plwa_off0_R1 (void) {
176 __asm__
__volatile__ ("plwa %0, +0(0), 1" : "=r" (rt
) );
178 static void test_plwa_off8_R1 (void) {
179 __asm__
__volatile__ ("plwa %0, +8(0), 1" : "=r" (rt
) );
181 static void test_plwa_off16_R1 (void) {
182 __asm__
__volatile__ ("plwa %0, +16(0), 1" : "=r" (rt
) );
184 static void test_plwa_off32_R1 (void) {
186 __asm__
__volatile__ ("plwa %0, +32(0), 1" : "=r" (rt
) );
189 static void test_plwa_off64_R1 (void) {
191 __asm__
__volatile__ ("plwa %0, +64(0), 1" : "=r" (rt
) );
195 static void test_pld_off0_R1 (void) {
197 __asm__
__volatile__ ("pld %0, +0(0), 1" : "=r" (rt
) );
200 static void test_pld_off8_R1 (void) {
202 __asm__
__volatile__ ("pld %0, +8(0), 1" : "=r" (rt
) );
205 static void test_pld_off16_R1 (void) {
207 __asm__
__volatile__ ("pld %0, +16(0), 1" : "=r" (rt
) );
210 static void test_pld_off32_R1 (void) {
212 __asm__
__volatile__ ("pld %0, +32(0), 1" : "=r" (rt
) );
215 static void test_pld_off64_R1 (void) {
217 __asm__
__volatile__ ("pld %0, +64(0), 1" : "=r" (rt
) );
221 static void test_pstb_off0_R1 (void) {
222 __asm__
__volatile__ ("pstb %0, -0x1f400+0(0), 1" :: "r" (rs
) );
224 static void test_pstb_off8_R1 (void) {
225 __asm__
__volatile__ ("pstb %0, -0x1f400+8(0), 1" :: "r" (rs
) );
227 static void test_pstb_off16_R1 (void) {
228 __asm__
__volatile__ ("pstb %0, -0x1f400+16(0), 1" :: "r" (rs
) );
230 static void test_pstb_off32_R1 (void) {
231 __asm__
__volatile__ ("pstb %0, -0x1f400+32(0), 1" :: "r" (rs
) );
233 static void test_psth_off0_R1 (void) {
234 __asm__
__volatile__ ("psth %0, -0x1f400+0(0), 1" :: "r" (rs
) );
236 static void test_psth_off8_R1 (void) {
237 __asm__
__volatile__ ("psth %0, -0x1f400+8(0), 1" :: "r" (rs
) );
239 static void test_psth_off16_R1 (void) {
240 __asm__
__volatile__ ("psth %0, -0x1f400+16(0), 1" :: "r" (rs
) );
242 static void test_psth_off32_R1 (void) {
243 __asm__
__volatile__ ("psth %0, -0x1f400+32(0), 1" :: "r" (rs
) );
245 static void test_pstw_off0_R1 (void) {
246 __asm__
__volatile__ ("pstw %0, -0x1f400+0(0), 1" :: "r" (rs
) );
248 static void test_pstw_off8_R1 (void) {
249 __asm__
__volatile__ ("pstw %0, -0x1f400+8(0), 1" :: "r" (rs
) );
251 static void test_pstw_off16_R1 (void) {
252 __asm__
__volatile__ ("pstw %0, -0x1f400+16(0), 1" :: "r" (rs
) );
254 static void test_pstw_off32_R1 (void) {
255 __asm__
__volatile__ ("pstw %0, -0x1f400+32(0), 1" :: "r" (rs
) );
257 static void test_pstd_off0_R1 (void) {
258 __asm__
__volatile__ ("pstd %0, -0x1f400+0(0), 1" :: "r" (rs
) );
260 static void test_pstd_off8_R1 (void) {
261 __asm__
__volatile__ ("pstd %0, -0x1f400+8(0), 1" :: "r" (rs
) );
263 static void test_pstd_off16_R1 (void) {
264 __asm__
__volatile__ ("pstd %0, -0x1f400+16(0), 1" :: "r" (rs
) );
266 static void test_pstd_off32_R1 (void) {
267 __asm__
__volatile__ ("pstd %0, -0x1f400+32(0), 1" :: "r" (rs
) );
269 /* For the paddi tests; although we can get close to a read/write target
270 due to forcing where the .text and .bss sections are placed, there is
271 still enough codegen variability that having a raw value in the exp
272 file will not be determinative for these instructions.
273 Thus, compromise and just ensure that the generated value is an
274 address that lands within the reloc buffer, and use quasi magic
275 eyecatcher values in the return to indicate success. */
276 static void test_paddi_0_R1 (void) {
277 __asm__
__volatile__ ("paddi %0, 0, 0+0, 1" : "=r" (rt
) );
278 rt
= rt
- TEXT_BSS_DELTA
;
279 if (rt
> pcrelative_buff_addr(0) &&
280 rt
< pcrelative_buff_addr(RELOC_BUFFER_SIZE
))
283 static void test_paddi_12_R1 (void) {
284 __asm__
__volatile__ ("paddi %0, 0, 0+12, 1" : "=r" (rt
) );
285 rt
= rt
- TEXT_BSS_DELTA
;
286 if (rt
> pcrelative_buff_addr(0) &&
287 rt
< pcrelative_buff_addr(RELOC_BUFFER_SIZE
))
290 static void test_paddi_48_R1 (void) {
291 __asm__
__volatile__ ("paddi %0, 0, 0+48, 1" : "=r" (rt
) );
292 rt
= rt
- TEXT_BSS_DELTA
;
293 if (rt
> pcrelative_buff_addr(0) &&
294 rt
< pcrelative_buff_addr(RELOC_BUFFER_SIZE
))
297 static void test_paddi_98_R1 (void) {
298 __asm__
__volatile__ ("paddi %0, 0, 0+98, 1" : "=r" (rt
) );
299 rt
= rt
- TEXT_BSS_DELTA
;
300 if (rt
> pcrelative_buff_addr(0) &&
301 rt
< pcrelative_buff_addr(RELOC_BUFFER_SIZE
))
304 static void test_plq_off0_R1 (void) {
306 __asm__
__volatile__ ("plq %0, +0(0), 1" : "=r" (rt
) );
309 static void test_plq_off8_R1 (void) {
311 __asm__
__volatile__ ("plq %0, +8(0), 1" : "=r" (rt
) );
314 static void test_plq_off16_R1 (void) {
316 __asm__
__volatile__ ("plq %0, +16(0), 1" : "=r" (rt
) );
319 static void test_plq_off32_R1 (void) {
321 __asm__
__volatile__ ("plq %0, +32(0), 1" : "=r" (rt
) );
324 static void test_plq_off48_R1 (void) {
326 __asm__
__volatile__ ("plq %0, +48(0), 1" : "=r" (rt
) );
329 static void test_plq_off64_R1 (void) {
331 __asm__
__volatile__ ("plq %0, +64(0), 1" : "=r" (rt
) );
335 static void test_pstq_off0_R1 (void) {
336 __asm__
__volatile__ ("pstq 24, -0x1f400+0(0), 1" );
338 static void test_pstq_off8_R1 (void) {
339 __asm__
__volatile__ ("pstq 24, -0x1f400+8(0), 1" );
341 static void test_pstq_off16_R1 (void) {
342 __asm__
__volatile__ ("pstq 24, -0x1f400+16(0), 1" );
344 static void test_pstq_off32_R1 (void) {
345 __asm__
__volatile__ ("pstq 24, -0x1f400+32(0), 1" );
347 static void test_pstq_off64_R1 (void) {
348 __asm__
__volatile__ ("pstq 24, -0x1f400+64(0), 1" );
351 static test_list_t testgroup_generic
[] = {
352 { &test_paddi_0_R1
, "paddi 0_R1", "RT,RA,SI,R"}, /* bcwp */
353 { &test_paddi_12_R1
, "paddi 12_R1", "RT,RA,SI,R"}, /* bcwp */
354 { &test_paddi_48_R1
, "paddi 48_R1", "RT,RA,SI,R"}, /* bcwp */
355 { &test_paddi_98_R1
, "paddi 98_R1", "RT,RA,SI,R"}, /* bcwp */
356 { &test_plbz_off0_R1
, "plbz off0_R1", "RT,D(RA),R"}, /* bcwp */
357 { &test_plbz_off8_R1
, "plbz off8_R1", "RT,D(RA),R"}, /* bcwp */
358 { &test_plbz_off16_R1
, "plbz off16_R1", "RT,D(RA),R"}, /* bcwp */
359 { &test_plbz_off32_R1
, "plbz off32_R1", "RT,D(RA),R"}, /* bcwp */
360 { &test_plbz_off64_R1
, "plbz off64_R1", "RT,D(RA),R"}, /* bcwp */
361 { &test_pld_off0_R1
, "pld off0_R1", "RT,D(RA),R"}, /* bcwp */
362 { &test_pld_off8_R1
, "pld off8_R1", "RT,D(RA),R"}, /* bcwp */
363 { &test_pld_off16_R1
, "pld off16_R1", "RT,D(RA),R"}, /* bcwp */
364 { &test_pld_off32_R1
, "pld off32_R1", "RT,D(RA),R"}, /* bcwp */
365 { &test_pld_off64_R1
, "pld off64_R1", "RT,D(RA),R"}, /* bcwp */
366 { &test_plha_off0_R1
, "plha off0_R1", "RT,D(RA),R"}, /* bcwp */
367 { &test_plha_off8_R1
, "plha off8_R1", "RT,D(RA),R"}, /* bcwp */
368 { &test_plha_off16_R1
, "plha off16_R1", "RT,D(RA),R"}, /* bcwp */
369 { &test_plha_off32_R1
, "plha off32_R1", "RT,D(RA),R"}, /* bcwp */
370 { &test_plha_off64_R1
, "plha off64_R1", "RT,D(RA),R"}, /* bcwp */
371 { &test_plhz_off0_R1
, "plhz off0_R1", "RT,D(RA),R"}, /* bcwp */
372 { &test_plhz_off8_R1
, "plhz off8_R1", "RT,D(RA),R"}, /* bcwp */
373 { &test_plhz_off16_R1
, "plhz off16_R1", "RT,D(RA),R"}, /* bcwp */
374 { &test_plhz_off32_R1
, "plhz off32_R1", "RT,D(RA),R"}, /* bcwp */
375 { &test_plhz_off64_R1
, "plhz off64_R1", "RT,D(RA),R"}, /* bcwp */
376 { &test_plq_off0_R1
, "plq off0_R1", "RTp,D(RA),R"}, /* bcwp */
377 { &test_plq_off8_R1
, "plq off8_R1", "RTp,D(RA),R"}, /* bcwp */
378 { &test_plq_off16_R1
, "plq off16_R1", "RTp,D(RA),R"}, /* bcwp */
379 { &test_plq_off32_R1
, "plq off32_R1", "RTp,D(RA),R"}, /* bcwp */
380 { &test_plq_off48_R1
, "plq off48_R1", "RTp,D(RA),R"}, /* bcwp */
381 { &test_plq_off64_R1
, "plq off64_R1", "RTp,D(RA),R"}, /* bcwp */
382 { &test_plwa_off0_R1
, "plwa off0_R1", "RT,D(RA),R"}, /* bcwp */
383 { &test_plwa_off8_R1
, "plwa off8_R1", "RT,D(RA),R"}, /* bcwp */
384 { &test_plwa_off16_R1
, "plwa off16_R1", "RT,D(RA),R"}, /* bcwp */
385 { &test_plwa_off32_R1
, "plwa off32_R1", "RT,D(RA),R"}, /* bcwp */
386 { &test_plwa_off64_R1
, "plwa off64_R1", "RT,D(RA),R"}, /* bcwp */
387 { &test_plwz_off0_R1
, "plwz off0_R1", "RT,D(RA),R"}, /* bcwp */
388 { &test_plwz_off8_R1
, "plwz off8_R1", "RT,D(RA),R"}, /* bcwp */
389 { &test_plwz_off16_R1
, "plwz off16_R1", "RT,D(RA),R"}, /* bcwp */
390 { &test_plwz_off32_R1
, "plwz off32_R1", "RT,D(RA),R"}, /* bcwp */
391 { &test_plwz_off64_R1
, "plwz off64_R1", "RT,D(RA),R"}, /* bcwp */
392 { &test_plxvp_off0_R1
, "plxvp off0_R1", "XTp,D(RA),R"}, /* bcwp */
393 { &test_plxvp_off8_R1
, "plxvp off8_R1", "XTp,D(RA),R"}, /* bcwp */
394 { &test_plxvp_off16_R1
, "plxvp off16_R1", "XTp,D(RA),R"}, /* bcwp */
395 { &test_plxvp_off24_R1
, "plxvp off24_R1", "XTp,D(RA),R"}, /* bcwp */
396 { &test_plxvp_off32_R1
, "plxvp off32_R1", "XTp,D(RA),R"}, /* bcwp */
397 { &test_pstb_off0_R1
, "pstb off0_R1", "RS,D(RA),R"}, /* bcwp */
398 { &test_pstb_off8_R1
, "pstb off8_R1", "RS,D(RA),R"}, /* bcwp */
399 { &test_pstb_off16_R1
, "pstb off16_R1", "RS,D(RA),R"}, /* bcwp */
400 { &test_pstb_off32_R1
, "pstb off32_R1", "RS,D(RA),R"}, /* bcwp */
401 { &test_pstd_off0_R1
, "pstd off0_R1", "RS,D(RA),R"}, /* bcwp */
402 { &test_pstd_off8_R1
, "pstd off8_R1", "RS,D(RA),R"}, /* bcwp */
403 { &test_pstd_off16_R1
, "pstd off16_R1", "RS,D(RA),R"}, /* bcwp */
404 { &test_pstd_off32_R1
, "pstd off32_R1", "RS,D(RA),R"}, /* bcwp */
405 { &test_psth_off0_R1
, "psth off0_R1", "RS,D(RA),R"}, /* bcwp */
406 { &test_psth_off8_R1
, "psth off8_R1", "RS,D(RA),R"}, /* bcwp */
407 { &test_psth_off16_R1
, "psth off16_R1", "RS,D(RA),R"}, /* bcwp */
408 { &test_psth_off32_R1
, "psth off32_R1", "RS,D(RA),R"}, /* bcwp */
409 { &test_pstq_off0_R1
, "pstq off0_R1", "RSp,D(RA),R"}, /* bcwp */
410 { &test_pstq_off8_R1
, "pstq off8_R1", "RSp,D(RA),R"}, /* bcwp */
411 { &test_pstq_off16_R1
, "pstq off16_R1", "RSp,D(RA),R"}, /* bcwp */
412 { &test_pstq_off32_R1
, "pstq off32_R1", "RSp,D(RA),R"}, /* bcwp */
413 { &test_pstq_off64_R1
, "pstq off64_R1", "RSp,D(RA),R"}, /* bcwp */
414 { &test_pstw_off0_R1
, "pstw off0_R1", "RS,D(RA),R"}, /* bcwp */
415 { &test_pstw_off8_R1
, "pstw off8_R1", "RS,D(RA),R"}, /* bcwp */
416 { &test_pstw_off16_R1
, "pstw off16_R1", "RS,D(RA),R"}, /* bcwp */
417 { &test_pstw_off32_R1
, "pstw off32_R1", "RS,D(RA),R"}, /* bcwp */
421 /* Allow skipping of tests. */
422 unsigned long test_count
=0xffff;
423 unsigned long skip_count
=0;
424 unsigned long setup_only
=0;
426 /* Set up a setjmp/longjmp to gently handle our SIGILLs and SIGSEGVs. */
427 static jmp_buf mybuf
;
429 /* This (testfunction_generic) is meant to handle all of the instruction
430 variations. The helpers set up the register and iterator values
431 as is appropriate for the instruction being tested. */
432 static void testfunction_generic (const char* instruction_name
,
433 test_func_t test_function
,
434 unsigned int ignore_flags
,
437 identify_form_components (instruction_name
, cur_form
);
438 debug_show_form (instruction_name
, cur_form
);
440 debug_show_iter_ranges ();
441 initialize_buffer (0);
442 init_pcrelative_write_target ();
443 debug_dump_buffer ();
445 for (vrai
= a_start
; vrai
< a_iters
; vrai
+=a_inc
) {
446 for (vrbi
= b_start
; vrbi
< b_iters
; vrbi
+=b_inc
) {
447 for (vrci
= c_start
; vrci
< c_iters
; vrci
+=c_inc
) {
448 for (vrmi
= m_start
; (vrmi
< m_iters
) ; vrmi
+=m_inc
) {
450 debug_show_current_iteration ();
451 // Be sure to initialize the target registers first.
452 initialize_target_registers ();
453 initialize_source_registers ();
454 printf ("%s", instruction_name
);
455 print_register_header ();
456 printf( " =>"); fflush (stdout
);
459 if ( setjmp ( mybuf
) ) {
460 printf("signal tripped. (FIXME)\n");
466 print_register_footer ();
467 print_result_buffer ();
468 print_pcrelative_write_target ();
476 void mykillhandler ( int x
) { longjmp (mybuf
, 1); }
477 void mysegvhandler ( int x
) { longjmp (mybuf
, 1); }
479 static void do_tests ( void )
483 test_group_t group_function
= &testfunction_generic
;
484 test_list_t
*tests
= testgroup_generic
;
486 struct sigaction kill_action
, segv_action
;
487 struct sigaction old_kill_action
, old_segv_action
;
489 kill_action
.sa_handler
= mykillhandler
;
490 segv_action
.sa_handler
= mysegvhandler
;
491 sigemptyset ( &kill_action
.sa_mask
);
492 sigemptyset ( &segv_action
.sa_mask
);
493 kill_action
.sa_flags
= SA_NODEFER
;
494 segv_action
.sa_flags
= SA_NODEFER
;
495 sigaction ( SIGILL
, &kill_action
, &old_kill_action
);
496 sigaction ( SIGSEGV
, &segv_action
, &old_segv_action
);
499 for (groupcount
= 0; tests
[groupcount
].name
!= NULL
; groupcount
++) {
500 cur_form
= strdup(tests
[groupcount
].form
);
501 current_test
= tests
[groupcount
];
502 identify_instruction_by_func_name (current_test
.name
);
503 if (groupcount
< skip_count
) continue;
504 if (verbose
) printf("Test #%d ,", groupcount
);
505 if (verbose
> 1) printf(" instruction %s (v=%d)", current_test
.name
, verbose
);
506 (*group_function
) (current_test
.name
, current_test
.func
, 0, cur_form
);
508 if (groupcount
>= (skip_count
+test_count
)) break;
510 if (debug_show_labels
) printf("\n");
511 printf ("All done. Tested %d different instruction groups\n", groupcount
);
514 static void usage (void)
517 "Usage: test_isa_XXX [OPTIONS]\n"
518 "\t-h: display this help and exit\n"
519 "\t-v: increase verbosity\n"
520 "\t-a <foo> : limit number of a-iterations to <foo>\n"
521 "\t-b <foo> : limit number of b-iterations to <foo>\n"
522 "\t-c <foo> : limit number of c-iterations to <foo>\n"
523 "\t-n <foo> : limit to this number of tests.\n"
524 "\t-r <foo>: run only test # <foo> \n"
526 "\t-j :enable setjmp to recover from illegal insns. \n"
527 "\t-m :(dev only?) lock VRM value to zero.\n"
528 "\t-z :(dev only?) lock MC value to zero.\n"
529 "\t-p :(dev only?) disable prefix instructions\n"
530 "\t-s <foo>: skip <foo> tests \n"
531 "\t-c <foo>: stop after running <foo> # of tests \n"
532 "\t-f : Do the test setup but do not actually execute the test instruction. \n"
536 int main (int argc
, char **argv
)
539 while ((c
= getopt(argc
, argv
, "dhjvmpfzs:a:b:c:n:r:")) != -1) {
549 /* Options related to limiting the test iterations. */
551 a_limit
=atoi (optarg
);
552 printf ("limiting a-iters to %ld.\n", a_limit
);
555 b_limit
=atoi (optarg
);
556 printf ("limiting b-iters to %ld.\n", b_limit
);
559 c_limit
=atoi (optarg
);
560 printf ("limiting c-iters to %ld.\n", c_limit
);
562 case 'n': // run this number of tests.
563 test_count
=atoi (optarg
);
564 printf ("limiting to %ld tests\n", test_count
);
566 case 'r': // run just test #<foo>.
567 skip_count
=atoi (optarg
);
569 if (verbose
) printf("Running test number %ld\n", skip_count
);
571 case 's': // skip this number of tests.
572 skip_count
=atoi (optarg
);
573 printf ("skipping %ld tests\n", skip_count
);
579 printf("DEBUG:dump_tables.\n");
583 printf("DEBUG:setup_only.\n");
587 printf ("DEBUG:setjmp enabled.\n");
591 printf ("DEBUG:vrm override enabled.\n");
595 printf ("DEBUG:prefix override enabled.\n");
599 printf ("DEBUG:MC override enabled.\n");
603 fprintf(stderr
, "Unknown argument: '%c'\n", c
);
610 build_float_vsx_tables ();
613 dump_float_vsx_tables ();
623 int main (int argc
, char **argv
)
625 printf("NO ISA 3.1 SUPPORT\n");