11# pragma clang diagnostic push
12# pragma clang diagnostic ignored "-Wmismatched-tags"
14#define HALF_ROUND_STYLE 1
15#define HALF_ROUND_TIES_TO_EVEN 1
18# pragma clang diagnostic pop
24#define MIM_1_8_16_32_64(m) m(1) m(8) m(16) m(32) m(64)
25#define MIM_8_16_32_64(m) m(8) m(16) m(32) m(64)
26#define MIM_16_32_64(m) m(16) m(32) m(64)
32 using s ## i = int ## i ##_t; \
33 using u ## i = uint ## i ##_t;
37using half_float::half;
52template<
int>
struct w2u_ {
using type = void; };
53template<
int>
struct w2s_ {
using type = void; };
54template<
int>
struct w2f_ {
using type = void; };
55template<>
struct w2u_<1> {
using type = bool; };
56template<>
struct w2s_<1> {
using type = bool; };
59 template<> struct w2u_<i> { using type = u ## i; }; \
60 template<> struct w2s_<i> { using type = s ## i; };
65 template<> struct w2f_<i> { using type = f ## i; };
72template<
int w>
using w2u =
typename detail::w2u_<w>::type;
73template<
int w>
using w2s =
typename detail::w2s_<w>::type;
74template<
int w>
using w2f =
typename detail::w2f_<w>::type;
80 constexpr s ## i operator"" _s ## i(unsigned long long int s) { return s ## i(s); } \
81 constexpr u ## i operator"" _u ## i(unsigned long long int u) { return u ## i(u); }
86constexpr size_t operator""_s(
unsigned long long int i) {
return size_t(i); }
87constexpr nat_t operator""_n(
unsigned long long int i) {
return nat_t(i); }
88inline f16 operator""_f16(
long double d) {
return f16(
float(d)); }
89constexpr f32 operator""_f32(
long double d) {
return f32(d); }
90constexpr f64 operator""_f64(
long double d) {
return f64(d); }
95inline half
rem(half a, half b) {
return fmod(a, b); }
96inline float rem(
float a,
float b) {
return std::fmod(a, b); }
97inline double rem(
double a,
double b) {
return std::fmod(a, b); }
98inline long double rem(
long double a,
long double b) {
return std::fmod(a, b); }
typename detail::w2f_< w >::type w2f
typename detail::w2s_< w >::type w2s
typename detail::w2u_< w >::type w2u
#define MIM_8_16_32_64(m)