Lines Matching +full:gen +full:- +full:2

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()
70 struct gen struct
103 /* result = y + tail*2^ulpexp. */
123 next1 (struct gen *g) 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()
136 next2 (uint64_t *x2, struct gen *g) in next2()
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
317 #define F2(x) F (x##f, x##f, x, mpfr_##x, 2, 1, f2, 0)
319 #define D2(x) F (x, x, x##l, mpfr_##x, 2, 0, d2, 0)
322 #define ZVNF2(x) F (_ZGVnN4vv_##x##f, Z_##x##f, x, mpfr_##x, 2, 1, f2, 0)
324 #define ZVND2(x) F (_ZGVnN2vv_##x, Z_##x, x##l, mpfr_##x, 2, 0, d2, 0)
327 #define ZSVF2(x) SVF (_ZGVsMxvv_##x##f, Z_sv_##x##f, x, mpfr_##x, 2, 1, f2, 0)
329 #define ZSVD2(x) SVF (_ZGVsMxvv_##x, Z_sv_##x, x##l, mpfr_##x, 2, 0, d2, 0)
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()
442 printgen_f1 (const struct fun *f, struct gen *gen) in printgen_f1() argument
444 printf ("%s in [%a;%a]", f->name, asfloat (gen->start), in printgen_f1()
445 asfloat (gen->start + gen->len)); in printgen_f1()
448 printgen_f2 (const struct fun *f, struct gen *gen) in printgen_f2() argument
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()
455 printgen_d1 (const struct fun *f, struct gen *gen) in printgen_d1() argument
457 printf ("%s in [%a;%a]", f->name, asdouble (gen->start), in printgen_d1()
458 asdouble (gen->start + gen->len)); in printgen_d1()
461 printgen_d2 (const struct fun *f, struct gen *gen) in printgen_d2() argument
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()
482 return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000; in issignaling_f()
490 return 2 * (ix ^ 0x0008000000000000) > 2 * 0x7ff8000000000000ULL; in issignaling_d()
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
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()
624 cmp (const struct fun *f, struct gen *gen, const struct conf *conf) in cmp() argument
627 if (f->arity == 1 && f->singleprec) in cmp()
628 r = cmp_f1 (f, gen, conf); in cmp()
629 else if (f->arity == 2 && f->singleprec) in cmp()
630 r = cmp_f2 (f, gen, conf); in cmp()
631 else if (f->arity == 1 && !f->singleprec) in cmp()
632 r = cmp_d1 (f, gen, conf); in cmp()
633 else if (f->arity == 2 && !f->singleprec) in cmp()
634 r = cmp_d2 (f, gen, conf); 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()
693 parsegen (struct gen *g, int argc, char *argv[], const struct fun *f) in parsegen()
695 int singleprec = f->singleprec; in parsegen()
696 int arity = f->arity; in parsegen()
704 argc -= 2; in parsegen()
705 argv += 2; in parsegen()
710 if (argc > 2 && strcmp (argv[2], "x") == 0) in parsegen()
712 argc -= 3; in parsegen()
719 if (argc > 2) in parsegen()
720 n = strtoull (argv[2], 0, 0); 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()
735 else if (arity == 2) 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()
752 struct gen gen; in main() local
766 argc--; in main()
770 if (argv[0][0] != '-') in main()
775 argc--; in main()
785 argc--; in main()
798 conf.rc = argv[0][2]; 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()
873 parsegen (&gen, argc, argv, f); in main()
874 conf.n = gen.cnt; in main()
876 svbool_t pg = parse_pg (pg_int, f->singleprec); in main()
879 return cmp (f, &gen, &conf); in main()