mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00: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:
parent
44a6213c8e
commit
068a627455
@ -1,3 +1,11 @@
|
||||
2015-03-11 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2015-03-10 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* scripts/evaluate-test.sh: Grok exit code 77 as UNSUPPORTED and exit
|
||||
|
@ -927,7 +927,7 @@
|
||||
break; \
|
||||
\
|
||||
default: \
|
||||
abort (); \
|
||||
_FP_UNREACHABLE; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
@ -1092,7 +1092,7 @@
|
||||
break; \
|
||||
\
|
||||
default: \
|
||||
abort (); \
|
||||
_FP_UNREACHABLE; \
|
||||
} \
|
||||
\
|
||||
/* T = X * Y is zero, infinity or NaN. */ \
|
||||
@ -1148,7 +1148,7 @@
|
||||
break; \
|
||||
\
|
||||
default: \
|
||||
abort (); \
|
||||
_FP_UNREACHABLE; \
|
||||
} \
|
||||
done_fma: ; \
|
||||
} \
|
||||
@ -1215,7 +1215,7 @@
|
||||
break; \
|
||||
\
|
||||
default: \
|
||||
abort (); \
|
||||
_FP_UNREACHABLE; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user