Lines Matching +full:ulp +full:- +full:allow

2  * ULP error checking tool for math functions.
4 * Copyright (c) 2019-2024, Arm Limited.
5 * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
17 # error "SVE not supported - please disable WANT_SVE_TESTS"
65 if (r - m <= -n) in randn()
126 that produce dense sampling without collisions and allow in next1()
128 uint64_t r = g->start + g->off; in next1()
129 g->off += g->step + randn (g->step / 2); in next1()
130 if (g->off > g->len) in next1()
131 g->off -= g->len; /* hack. */ in next1()
139 uint64_t r = g->start + randn (g->len); in next2()
140 *x2 = g->start2 + randn (g->len2); in next2()
174 with an in-range value and then with a special case value. */
179 /* First element of fv and dv may be changed by -c argument. */
180 static float fv[2] = {1.0f, -INFINITY};
181 static double dv[2] = {1.0, -INFINITY};
202 base[n - 1] = (float) fv[secondcall]; in svargf()
212 base[n - 1] = dv[secondcall]; in svargd()
303 // clang-format off
344 // clang-format on
354 return e - 0x7f - 23; in ulpscale_f()
362 return e - 0x3ff - 52; in ulpscale_d()
368 if (f->is_predicated) in call_f1()
369 return f->fun.f1_pred (*conf->pg, a.x); in call_f1()
371 return f->fun.f1 (a.x); in call_f1()
377 if (f->is_predicated) in call_f2()
378 return f->fun.f2_pred (*conf->pg, a.x, a.x2); in call_f2()
380 return f->fun.f2 (a.x, a.x2); in call_f2()
387 if (f->is_predicated) in call_d1()
388 return f->fun.d1_pred (*conf->pg, a.x); in call_d1()
390 return f->fun.d1 (a.x); in call_d1()
396 if (f->is_predicated) in call_d2()
397 return f->fun.d2_pred (*conf->pg, a.x, a.x2); in call_d2()
399 return f->fun.d2 (a.x, a.x2); in call_d2()
404 return f->fun_long.f1 (a.x); in call_long_f1()
409 return f->fun_long.f2 (a.x, a.x2); in call_long_f2()
414 return f->fun_long.d1 (a.x); in call_long_d1()
419 return f->fun_long.d2 (a.x, a.x2); in call_long_d2()
424 printf ("%s(%a)", f->name, a.x); in printcall_f1()
429 printf ("%s(%a, %a)", f->name, a.x, a.x2); in printcall_f2()
434 printf ("%s(%a)", f->name, a.x); in printcall_d1()
439 printf ("%s(%a, %a)", f->name, a.x, a.x2); in printcall_d2()
444 printf ("%s in [%a;%a]", f->name, asfloat (gen->start), in printgen_f1()
445 asfloat (gen->start + gen->len)); in printgen_f1()
450 printf ("%s in [%a;%a] x [%a;%a]", f->name, asfloat (gen->start), in printgen_f2()
451 asfloat (gen->start + gen->len), asfloat (gen->start2), in printgen_f2()
452 asfloat (gen->start2 + gen->len2)); in printgen_f2()
457 printf ("%s in [%a;%a]", f->name, asdouble (gen->start), in printgen_d1()
458 asdouble (gen->start + gen->len)); in printgen_d1()
463 printf ("%s in [%a;%a] x [%a;%a]", f->name, asdouble (gen->start), in printgen_d2()
464 asdouble (gen->start + gen->len), asdouble (gen->start2), in printgen_d2()
465 asdouble (gen->start2 + gen->len2)); in printgen_d2()
508 return -1; in rmap()
515 #define emin_f -148
516 #define emin_d -1073
524 return f->fun_mpfr.f1 (y, x, r); in call_mpfr_f1()
533 return f->fun_mpfr.f2 (y, x, x2, r); in call_mpfr_f2()
540 return f->fun_mpfr.d1 (y, x, r); in call_mpfr_d1()
549 return f->fun_mpfr.d2 (y, x, x2, r); in call_mpfr_d2()
563 #define min_normal_f 0x1p-126f
575 #define min_normal_d 0x1p-1022
580 #include "ulp.h"
583 #include "ulp.h"
590 #include "ulp.h"
593 #include "ulp.h"
600 puts ("./ulp [-q] [-m] [-f] [-r {n|u|d|z}] [-l soft-ulplimit] [-e ulplimit] func " in usage()
603 puts ("-q: quiet."); in usage()
604 puts ("-m: use mpfr even if faster method is available."); in usage()
605 puts ("-f: disable fenv exceptions testing."); in usage()
607 puts ("-c: neutral 'control value' to test behaviour when one lane can affect another. \n" in usage()
608 " This should be different from tested input in other lanes, and non-special \n" in usage()
612 puts ("-p: integer input for controlling predicate passed to SVE function. " in usage()
616 puts ("-z: ignore sign of 0."); in usage()
618 for (const struct fun *f = fun; f->name; f++) in usage()
619 printf ("\t%s\n", f->name); in usage()
627 if (f->arity == 1 && f->singleprec) in cmp()
629 else if (f->arity == 2 && f->singleprec) in cmp()
631 else if (f->arity == 1 && !f->singleprec) in cmp()
633 else if (f->arity == 2 && !f->singleprec) in cmp()
649 else if (s[0] == '-') in getnum()
658 /* 0xXXXX is treated as bit representation, '-' flips the sign bit. */ in getnum()
679 /* Otherwise assume it's a floating-point literal. */ in getnum()
695 int singleprec = f->singleprec; in parsegen()
696 int arity = f->arity; in parsegen()
704 argc -= 2; in parsegen()
712 argc -= 3; in parsegen()
726 g->start = a; in parsegen()
727 g->len = b - a; in parsegen()
728 if (n - 1 > b - a) in parsegen()
729 n = b - a + 1; in parsegen()
730 g->off = 0; in parsegen()
731 g->step = n ? (g->len + 1) / n : 1; in parsegen()
732 g->start2 = g->len2 = 0; in parsegen()
733 g->cnt = n; in parsegen()
737 g->start = a; in parsegen()
738 g->len = b - a; in parsegen()
739 g->off = g->step = 0; in parsegen()
740 g->start2 = a2; in parsegen()
741 g->len2 = b2 - a2; in parsegen()
742 g->cnt = n; in parsegen()
766 argc--; in main()
770 if (argv[0][0] != '-') in main()
775 argc--; in main()
785 argc--; in main()
801 argc--; in main()
813 argc--; in main()
821 argc--; in main()
847 for (f = fun; f->name; f++) in main()
848 if (strcmp (argv[0], f->name) == 0) in main()
850 if (!f->name) in main()
864 if (!f->singleprec && LDBL_MANT_DIG == DBL_MANT_DIG) in main()
871 argc--; in main()
876 svbool_t pg = parse_pg (pg_int, f->singleprec); in main()