mirror of git://sourceware.org/git/glibc.git
It removes the wrapper by moving the error/EDOM handling to an out-of-line implementation (__math_invalidf_i/__math_invalidf_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 <__ilogbf>: 0: 1e260000 fmov w0, s0 4: d3577801 ubfx x1, x0, #23, #8 8: 340000e1 cbz w1, 24 <__ilogbf+0x24> c: 5101fc20 sub w0, w1, #0x7f 10: 7103fc3f cmp w1, #0xff 14: 54000040 b.eq 1c <__ilogbf+0x1c> // b.none 18: d65f03c0 ret 1c: 12b00000 mov w0, #0x7fffffff // #2147483647 20: 14000000 b 0 <__math_invalidf_i> 24: 53175800 lsl w0, w0, #9 28: 340000a0 cbz w0, 3c <__ilogbf+0x3c> 2c: 5ac01000 clz w0, w0 30: 12800fc1 mov w1, #0xffffff81 // #-127 34: 4b000020 sub w0, w1, w0 38: d65f03c0 ret 3c: 320107e0 mov w0, #0x80000001 // #-2147483647 40: 14000000 b 0 <__math_invalidf_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> |
||
|---|---|---|
| .. | ||
| bits | ||
| coldfire | ||
| fpu | ||
| m680x0 | ||
| nptl | ||
| sys | ||
| Implies | ||
| Makefile | ||
| Versions | ||
| __longjmp.c | ||
| abort-instr.h | ||
| asm-syntax.h | ||
| backtrace.c | ||
| bsd-_setjmp.c | ||
| bsd-setjmp.c | ||
| configure | ||
| configure.ac | ||
| crti.S | ||
| crtn.S | ||
| dl-machine.h | ||
| dl-tls.h | ||
| dl-trampoline.S | ||
| elf-initfini.h | ||
| fpu_control.h | ||
| gccframe.h | ||
| jmpbuf-unwind.h | ||
| ldsodefs.h | ||
| libc-tls.c | ||
| math-use-builtins-ffs.h | ||
| memchr.S | ||
| memcopy.h | ||
| preconfigure | ||
| preconfigure.ac | ||
| rawmemchr.S | ||
| setjmp.c | ||
| shlib-versions | ||
| sotruss-lib.c | ||
| stackinfo.h | ||
| start.S | ||
| strchr.S | ||
| strchrnul.S | ||
| symbol-hacks.h | ||
| sysdep.h | ||
| thread_pointer.h | ||
| tst-audit.h | ||
| unwind-arch.h | ||
| utmp-size.h | ||
| wcpcpy_chk.c | ||
| wordcopy.c | ||