on targets where long double has the right semantics the public math header may typedef _Float128 even if the compiler has its own _Float128 definition. use #if !defined __FLT128_MANT_DIG__ || defined __cplusplus instead of #if !__GNUC_PREREQ (7, 0) || defined __cplusplus to check if compiler lacks _Float128 support since it works for both gcc and clang. clang trunk supports _Float128 since https://reviews.llvm.org/D40673 but they don't seem to support the f128 constant suffix (only q) nor the __builtin_inff128 etc builtins so a bit more change is required to make the headers work with it, and it's not clear how to check for those features (other than ifdef __clang__), however changing the headers to be able to work with other compilers is useful anyway.
FYI, f128 intrinsics were added a few days ago: https://reviews.llvm.org/rL321948 (Conversions are still lacking though.) At some point it might make sense to have a prereq macro that checks __clang_major__ and __clang_minor__.
clang reverted the _Float128 definition for now: https://github.com/llvm-mirror/clang/commit/2b1d36bee69eaf8897af89d53630804f9f66badd