You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[compiler-rt] Stop using x86 intrinsic on AArch64 with GCC
Previously, building `multc3.c` on A64 with GCC 7 or up but 9 and
lower will attempt to reference `__builtin_copysignq`, an
[x86-specific intrinsic][1]:
```
$ gcc -c multc3.c
In file included from fp_lib.h:24,
from multc3.c:14:
multc3.c: In function '__multc3':
int_math.h:71:32: warning: implicit declaration of function '__builtin_copysignq'; did you mean '__builtin_copysign'? [-Wimplicit-function-declaration]
#define crt_copysignf128(x, y) __builtin_copysignq((x), (y))
^~~~~~~~~~~~~~~~~~~
```
This is because `__has_builtin` is from GCC 10, and defined to 0 at the
top of int_math.h for affected GCC versions, so the fallback definition
is used. But `__builtin_copysignq` is unavailable on A64.
Use version detection to find `__builtin_copysignf128` instead. It's
available since GCC 7 and [available][2] on both x86 and A64, given this
macro is only used when `CRT_HAS_IEEE_TF`.
[1]: https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
[2]: https://gcc.gnu.org/gcc-7/changes.html
0 commit comments