[PATCH] D14187: [compiler-rt][aarch64] New tests for 128-bit floating-point builtins, fixes of tests and __fixuint

Adhemerval Zanella via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 5 10:21:55 PST 2015


zatrazz added inline comments.

================
Comment at: test/builtins/Unit/fixunstfti_test.c:89
@@ +88,3 @@
+    if (test__fixunstfti(0x1.FFFFFEp+126, make_ti(0x7fffff8000000000LL, 0x0)))
+        return 1;
+    if (test__fixunstfti(0x1.FFFFFEp+127, make_ti(0xffffff0000000000LL, 0x0)))
----------------
sdmitrouk wrote:
> zatrazz wrote:
> > sdmitrouk wrote:
> > > Actually it should be `(0xffffffffffffffffLL, 0xffffffffffffffffLL)` because input is larger than 2^128. `__fixuint` seems to have off by one error when checking for too large exponent (used `>` instead of `>=`), updated revision to address this. Thanks!
> > Unless I am missing something here, the code:
> > 
> > ```
> > void
> > func (void)
> > {
> >   mpfr_t number;
> >   mpfr_init2 (number, PRECISION);
> >   mpfr_set_ld (number, 0x1.FFFFFEp+127, MPFR_RNDN);
> >   mpfr_printf ("%Rf\n", number);
> > 
> >   mpz_t integer;
> >   mpz_init2 (integer, PRECISION);
> >   mpfr_get_z (integer, number, MPFR_RNDN);
> > 
> >   mpfr_printf ("float:   %Rf\n", number);
> >   mpfr_printf ("integer: %033ZX\n", integer);
> > }
> > ```
> > 
> > Prints on a aarch64 machine:
> > 
> > float:   340282346638528859811704183484516925440.000000
> > integer: 0FFFFFF00000000000000000000000000
> > 
> > And the maximum value of an uint128_t is:
> > 
> > 340282366920938463463374607431768211455L
> > 
> > So the value is still lower than 128 *unsigned* bits.
> > 
> I'm not sure I follow, your example confirms the line below:
> ```
>  if (test__fixunstfti(0x1.FFFFFEp+127, make_ti(0xffffff0000000000LL, 0x0)))
> ```
> but your first comment was about this line:
> ```
> if (test__fixunstfti(0x1.FFFFFEp+128, make_ti(0xfffffe0000000000LL, 0x0)))
> ```
> which is `1FFFFFE00000000000000000000000000` (33 nibbles) in integer form. The most significant bit used to be truncated (same happened for unsigned si and di), which is fixed by second revision.
Ah right, my confusion here. LGTM now.


Repository:
  rL LLVM

http://reviews.llvm.org/D14187





More information about the llvm-commits mailing list