diff --git a/src/halfvec.c b/src/halfvec.c index b821d7d..0d6d0c5 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -22,6 +22,10 @@ #define TYPALIGN_INT 'i' #endif +#ifdef F16C_SUPPORT +#include +#endif + /* * Check if half is NaN */ @@ -99,7 +103,9 @@ pq_sendhalf(StringInfo buf, half h) float HalfToFloat4(half num) { -#ifdef FLT16_SUPPORT +#if defined(F16C_SUPPORT) + return _cvtsh_ss(num); +#elif defined(FLT16_SUPPORT) return (float) num; #else /* TODO Improve performance */ @@ -184,7 +190,9 @@ HalfToFloat4(half num) half Float4ToHalfUnchecked(float num) { -#ifdef FLT16_SUPPORT +#if defined(F16C_SUPPORT) + return _cvtss_sh(num, 0); +#elif defined(FLT16_SUPPORT) return (_Float16) num; #else /* TODO Improve performance */ diff --git a/src/halfvec.h b/src/halfvec.h index 4c8adfd..5839dba 100644 --- a/src/halfvec.h +++ b/src/halfvec.h @@ -7,7 +7,9 @@ #include "vector.h" -#ifdef __FLT16_MAX__ +#if defined(__F16C__) +#define F16C_SUPPORT +#elif defined(__FLT16_MAX__) #define FLT16_SUPPORT #endif