https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109504
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Yeah. Enable all the time and have say the targetm.invalid_conversion, targetm.invalid_unary_op, targetm.invalid_binary_op and something in argument/return value passing reject _Float16/__bf16 in functions without SSE2. That will not be enough though, we'll need to arrange e.g. for the spot where we #undef/#define target macros based on currently active ISA in pragmas to also do that for __STDCPP_FLOAT16_T__ and __STDCPP_BFLOAT16_T__ for C++, and change libstdc++ such that for x86 it adds similarly to x86 intrin headers something like #ifndef __SSE2__ #pragma GCC push_options #pragma GCC target("sse2") #define __DISABLE_SSE2__ #endif /* __SSE2__ */ ... #ifdef __DISABLE_SSE2__ #undef __DISABLE_SSE2__ #pragma GCC pop_options #endif /* __DISABLE_SSE2__ */ around std::float16_t/std::bfloat16_t stuff. Definitely not stage4 material I'm afraid.