[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 08:26:09 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:
> 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.



Repository:
  rL LLVM

http://reviews.llvm.org/D14187





More information about the llvm-commits mailing list