================ @@ -0,0 +1,38 @@ +#include <clc/clcmacro.h> +#include <clc/internal/clc.h> +#include <clc/relational/clc_isnan.h> + +#define CLC_SIGN(TYPE, F) \ + _CLC_DEF _CLC_OVERLOAD TYPE __clc_sign(TYPE x) { \ + if (__clc_isnan(x)) { \ + return 0.0F; \ + } \ + if (x > 0.0F) { \ + return 1.0F; \ + } \ + if (x < 0.0F) { \ + return -1.0F; \ + } \ + return x; /* -0.0 or +0.0 */ \ ---------------- frasercrmck wrote:
I don't see how `copysign` could be used here, sorry. Could you elaborate? In another project we had an implementation of `sign` which bitcast to integer types and used bit twiddling which may be a better implementation. https://github.com/llvm/llvm-project/pull/115699 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits