Adhemerval Zanella
c4be334400
math: Optimize double ilogb/llogb
...
It removes the wrapper by moving the error/EDOM handling to an
out-of-line implementation (__math_invalid_i/__math_invalid_li).
Also, __glibc_unlikely is used on errors case since it helps
code generation on recent gcc.
The code now builds to with gcc-14 on aarch64:
0000000000000000 <__ilogb>:
0: 9e660000 fmov x0, d0
4: d374f801 ubfx x1, x0, #52 , #11
8: 340000e1 cbz w1, 24 <__ilogb+0x24>
c: 510ffc20 sub w0, w1, #0x3ff
10: 711ffc3f cmp w1, #0x7ff
14: 54000040 b.eq 1c <__ilogb+0x1c> // b.none
18: d65f03c0 ret
1c: 12b00000 mov w0, #0x7fffffff // #2147483647
20: 14000000 b 0 <__math_invalid_i>
24: d374cc00 lsl x0, x0, #12
28: b40000a0 cbz x0, 3c <__ilogb+0x3c>
2c: dac01000 clz x0, x0
30: 12807fc1 mov w1, #0xfffffc01 // #-1023
34: 4b000020 sub w0, w1, w0
38: d65f03c0 ret
3c: 320107e0 mov w0, #0x80000001 // #-2147483647
40: 14000000 b 0 <__math_invalid_i>
Some ABI requires additional adjustments:
* i386 and m68k requires to use the template version, since
both provide __ieee754_ilogb implementatations.
* loongarch uses a custom implementation as well.
* powerpc64le also has a custom implementation for POWER9, which
is also used for float and float128 version. The generic
e_ilogb.c implementation is moved on powerpc to keep the
current code as-is.
Checked on aarch64-linux-gnu and x86_64-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com >
2025-06-02 13:32:19 -03:00
..
2025-01-01 11:22:09 -08:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2025-01-01 11:22:09 -08:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2017-09-25 10:44:39 +01:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-06-19 12:08:47 -03:00
2020-01-03 10:02:04 -03:00
2018-09-05 16:22:00 +01:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2025-01-01 11:22:09 -08:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2025-01-01 11:22:09 -08:00
2018-09-12 17:36:33 +01:00
2020-01-03 10:02:04 -03:00
2017-09-29 17:17:41 +01:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2018-09-12 17:33:30 +01:00
2020-01-03 10:02:04 -03:00
2017-09-29 11:46:46 +01:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2018-09-19 10:04:51 +01:00
2025-01-01 11:22:09 -08:00
2017-09-29 17:30:53 +01:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2025-01-01 11:22:09 -08:00
2020-02-14 08:24:56 -06:00
2020-02-14 08:24:56 -06:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2020-01-03 10:02:04 -03:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2018-06-22 21:34:28 -03:00
2018-06-22 21:34:28 -03:00
2021-09-03 22:06:44 +05:30
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2021-09-03 22:06:44 +05:30
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2018-09-14 13:10:39 +00:00
2018-09-14 13:10:39 +00:00
2018-09-14 13:10:39 +00:00
2025-01-01 11:22:09 -08:00
2025-01-01 11:22:09 -08:00
2018-06-22 21:34:28 -03:00
2018-06-22 21:34:28 -03:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2025-01-01 11:22:09 -08:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2017-11-30 22:39:07 +00:00
2018-11-21 09:55:02 +00:00
2017-10-02 14:38:54 +01:00
2024-05-21 13:44:22 -03:00
2018-11-21 09:55:02 +00:00
2017-10-02 14:38:54 +01:00
2024-05-21 13:43:39 -03:00
2024-05-21 13:43:39 -03:00
2025-01-01 11:22:09 -08:00
2018-11-21 09:57:21 +00:00
2017-10-02 14:39:38 +01:00
2018-11-21 09:56:27 +00:00
2017-10-02 14:39:38 +01:00
2018-11-21 09:58:36 +00:00
2017-10-02 14:39:38 +01:00