David Rubin
938efe4aab
compiler-rt: fix f80 ceil/floor optimization
...
Our implementation did the classic add-sub rounding trick `(y = x +/- C =+ C - x)`
with `C = 1 / eps(T) = 2^(mantissa - 1)`. This approach only works for values whose
magnitude is below the rounding capacity of the constant. For a 64-bit mantissa
(like f80 has), `C = 2^63` only rounds for `|x| < 2^63`. Before we allowed this to
be ran on `e < bias + 64` aka `|x| < 2^64`. And because it isn't large enough,
we lose a bit to rounding.
For reference, the musl implementation does the same thing, using `mantissa - 1`:
https://git.musl-libc.org/cgit/musl/tree/src/math/ceill.c#n18
where `LDBL_MANT_DIG` is 64 for `long double` on x86.
This commit also combines the floor and ceil implementations into one generic one.
2026-01-08 00:45:52 +01:00
..
2025-07-16 10:27:39 -07:00
2022-06-17 16:38:59 -07:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-10-29 07:20:36 -04:00
2024-08-28 08:39:59 +01:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-03-05 03:01:43 +00:00
2026-01-04 00:27:08 -08:00
2024-06-16 11:53:33 +02:00
2024-06-16 11:53:33 +02:00
2024-06-16 11:53:33 +02:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2025-03-05 03:01:43 +00:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-07-22 19:43:47 -07:00
2024-09-02 00:10:22 +03:00
2025-07-22 19:43:47 -07:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2025-03-05 03:01:43 +00:00
2023-09-27 11:24:28 -07:00
2025-03-05 03:01:43 +00:00
2025-02-25 19:31:00 +01:00
2026-01-04 00:27:08 -08:00
2025-03-05 03:01:43 +00:00
2025-03-05 03:01:43 +00:00
2025-07-22 19:43:47 -07:00
2025-03-05 03:01:43 +00:00
2025-02-25 19:31:00 +01:00
2026-01-04 00:27:08 -08:00
2025-03-05 03:01:43 +00:00
2025-02-25 19:31:00 +01:00
2026-01-04 00:27:08 -08:00
2023-06-24 16:56:39 -07:00
2026-01-04 00:27:08 -08:00
2025-03-05 03:01:43 +00:00
2023-10-29 07:20:36 -04:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 19:23:43 +01:00
2026-01-04 19:23:43 +01:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-12-16 06:22:40 +01:00
2024-09-02 00:10:22 +03:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-07-22 19:43:47 -07:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-04-11 07:06:01 -04:00
2025-11-22 22:42:38 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-08 00:45:52 +01:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2022-05-06 22:41:00 -07:00
2023-10-29 07:20:36 -04:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2024-11-24 08:19:15 +01:00
2025-04-11 07:06:01 -04:00
2025-11-22 22:42:38 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 19:23:43 +01:00
2026-01-04 19:23:43 +01:00
2026-01-04 19:23:43 +01:00
2025-03-05 03:01:43 +00:00
2025-11-22 22:42:38 +00:00
2025-08-03 14:59:56 +02:00
2025-03-05 03:01:43 +00:00
2023-09-19 09:37:52 -07:00
2026-01-04 00:27:08 -08:00
2025-03-05 03:01:43 +00:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2024-03-14 19:43:24 +02:00
2025-07-22 19:43:47 -07:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-06-24 16:56:39 -07:00
2023-06-24 16:56:39 -07:00
2023-06-24 16:56:39 -07:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-06-24 16:56:39 -07:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-05-19 00:22:03 +02:00
2026-01-04 00:27:08 -08:00
2024-02-08 15:21:35 +01:00
2024-02-08 15:21:35 +01:00
2024-02-08 15:21:35 +01:00
2026-01-04 00:27:08 -08:00
2024-02-08 15:21:35 +01:00
2024-02-08 15:21:35 +01:00
2024-02-08 15:21:35 +01:00
2023-11-19 09:55:07 +00:00
2026-01-04 00:27:08 -08:00
2025-07-22 19:43:47 -07:00
2023-09-19 09:37:52 -07:00
2023-07-24 10:23:51 -07:00
2026-01-04 00:27:08 -08:00
2023-06-24 16:56:39 -07:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-12-16 06:24:49 +01:00
2026-01-04 00:27:08 -08:00
2025-08-30 06:36:41 +02:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2025-02-09 00:42:55 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-07-24 10:23:51 -07:00
2024-09-02 00:10:22 +03:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2023-11-19 09:55:07 +00:00
2025-07-22 19:43:47 -07:00
2024-10-19 19:44:53 +01:00
2025-07-22 19:43:47 -07:00
2024-10-19 19:44:53 +01:00
2022-11-16 13:08:41 +02:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00
2026-01-04 00:27:08 -08:00