1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

soft-fp: Add _FP_UNREACHABLE.

This patch makes soft-fp use a new macro _FP_UNREACHABLE in place of
calling abort in unreachable default cases of switch statements.
_FP_UNREACHABLE expands to call __builtin_unreachable for GCC 4.5 and
later; the fallback to abort is thus only for kernel use.

Tested for powerpc-nofpu that installed stripped shared libraries are
unchanged by this patch.  Also tested with the math/ tests for mips64
(in the case of fma there *was* previously an abort call generated,
unlike for the other operations - one switch only deals with a subset
of classes for one operand based on what could have been generated in
the earlier part of fma, whereas the other switches deal with all
combinations of two classes - and this is apparently too complicated
for the default case to have been optimized away).

	* soft-fp/soft-fp.h (_FP_UNREACHABLE): New macro.
	* soft-fp/op-common.h (_FP_MUL): Use _FP_UNREACHABLE instead of
	abort.
	(_FP_FMA): Likewise.
	(_FP_DIV): Likewise.
This commit is contained in:
Joseph Myers
2015-03-11 01:14:15 +00:00
parent 44a6213c8e
commit 068a627455
3 changed files with 21 additions and 4 deletions

View File

@ -51,6 +51,15 @@
# endif
#endif
/* For unreachable default cases in switch statements over bitwise OR
of FP_CLS_* values. */
#if (defined __GNUC__ \
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)))
# define _FP_UNREACHABLE __builtin_unreachable ()
#else
# define _FP_UNREACHABLE abort ()
#endif
/* In the Linux kernel, some architectures have a single function that
uses different kinds of unpacking and packing depending on the
instruction being emulated, meaning it is not readily visible to