brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · cb7000d Raw
95 lines · plain
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include <clc/internal/clc.h>10#include <clc/relational/relational.h>11 12#define _CLC_DEFINE_RELATIONAL_UNARY_VEC2(RET_TYPE, __CLC_FUNCTION, ARG_TYPE)  \13  _CLC_DEF _CLC_OVERLOAD RET_TYPE __CLC_FUNCTION(ARG_TYPE x) {                 \14    return (RET_TYPE)((RET_TYPE){__CLC_FUNCTION(x.lo),                         \15                                 __CLC_FUNCTION(x.hi)} != (RET_TYPE)0);        \16  }17 18#define _CLC_DEFINE_RELATIONAL_UNARY_VEC3(RET_TYPE, __CLC_FUNCTION, ARG_TYPE)  \19  _CLC_DEF _CLC_OVERLOAD RET_TYPE __CLC_FUNCTION(ARG_TYPE x) {                 \20    return (RET_TYPE)((RET_TYPE){__CLC_FUNCTION(x.s0), __CLC_FUNCTION(x.s1),   \21                                 __CLC_FUNCTION(x.s2)} != (RET_TYPE)0);        \22  }23 24#define _CLC_DEFINE_RELATIONAL_UNARY_VEC4(RET_TYPE, __CLC_FUNCTION, ARG_TYPE)  \25  _CLC_DEF _CLC_OVERLOAD RET_TYPE __CLC_FUNCTION(ARG_TYPE x) {                 \26    return (RET_TYPE)((RET_TYPE){__CLC_FUNCTION(x.s0), __CLC_FUNCTION(x.s1),   \27                                 __CLC_FUNCTION(x.s2),                         \28                                 __CLC_FUNCTION(x.s3)} != (RET_TYPE)0);        \29  }30 31#define _CLC_DEFINE_RELATIONAL_UNARY_VEC8(RET_TYPE, __CLC_FUNCTION, ARG_TYPE)  \32  _CLC_DEF _CLC_OVERLOAD RET_TYPE __CLC_FUNCTION(ARG_TYPE x) {                 \33    return (RET_TYPE)((RET_TYPE){__CLC_FUNCTION(x.s0), __CLC_FUNCTION(x.s1),   \34                                 __CLC_FUNCTION(x.s2), __CLC_FUNCTION(x.s3),   \35                                 __CLC_FUNCTION(x.s4), __CLC_FUNCTION(x.s5),   \36                                 __CLC_FUNCTION(x.s6),                         \37                                 __CLC_FUNCTION(x.s7)} != (RET_TYPE)0);        \38  }39 40#define _CLC_DEFINE_RELATIONAL_UNARY_VEC16(RET_TYPE, __CLC_FUNCTION, ARG_TYPE) \41  _CLC_DEF _CLC_OVERLOAD RET_TYPE __CLC_FUNCTION(ARG_TYPE x) {                 \42    return (RET_TYPE)((RET_TYPE){__CLC_FUNCTION(x.s0), __CLC_FUNCTION(x.s1),   \43                                 __CLC_FUNCTION(x.s2), __CLC_FUNCTION(x.s3),   \44                                 __CLC_FUNCTION(x.s4), __CLC_FUNCTION(x.s5),   \45                                 __CLC_FUNCTION(x.s6), __CLC_FUNCTION(x.s7),   \46                                 __CLC_FUNCTION(x.s8), __CLC_FUNCTION(x.s9),   \47                                 __CLC_FUNCTION(x.sa), __CLC_FUNCTION(x.sb),   \48                                 __CLC_FUNCTION(x.sc), __CLC_FUNCTION(x.sd),   \49                                 __CLC_FUNCTION(x.se),                         \50                                 __CLC_FUNCTION(x.sf)} != (RET_TYPE)0);        \51  }52 53#define _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(RET_TYPE, __CLC_FUNCTION,         \54                                             ARG_TYPE)                         \55  _CLC_DEFINE_RELATIONAL_UNARY_VEC2(RET_TYPE##2, __CLC_FUNCTION, ARG_TYPE##2)  \56  _CLC_DEFINE_RELATIONAL_UNARY_VEC3(RET_TYPE##3, __CLC_FUNCTION, ARG_TYPE##3)  \57  _CLC_DEFINE_RELATIONAL_UNARY_VEC4(RET_TYPE##4, __CLC_FUNCTION, ARG_TYPE##4)  \58  _CLC_DEFINE_RELATIONAL_UNARY_VEC8(RET_TYPE##8, __CLC_FUNCTION, ARG_TYPE##8)  \59  _CLC_DEFINE_RELATIONAL_UNARY_VEC16(RET_TYPE##16, __CLC_FUNCTION, ARG_TYPE##16)60 61_CLC_DEF _CLC_OVERLOAD int __clc_signbit(float x) {62  return __builtin_signbitf(x);63}64 65_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(int, __clc_signbit, float)66 67#ifdef cl_khr_fp6468 69#pragma OPENCL EXTENSION cl_khr_fp64 : enable70 71// The scalar version of __clc_signbit(double) returns an int, but the vector72// versions return long.73 74_CLC_DEF _CLC_OVERLOAD int __clc_signbit(double x) {75  return __builtin_signbit(x);76}77 78_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(long, __clc_signbit, double)79 80#endif81#ifdef cl_khr_fp1682 83#pragma OPENCL EXTENSION cl_khr_fp16 : enable84 85// The scalar version of __clc_signbit(half) returns an int, but the vector86// versions return short.87 88_CLC_DEF _CLC_OVERLOAD int __clc_signbit(half x) {89  return __builtin_signbit(x);90}91 92_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(short, __clc_signbit, half)93 94#endif95