|
6 | 6 | * when the result is true.
|
7 | 7 | */
|
8 | 8 |
|
9 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_SCALAR(RET_TYPE, FUNCTION, BUILTIN_NAME, \ |
10 |
| - ARG_TYPE) \ |
11 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
12 |
| - return BUILTIN_NAME(x); \ |
13 |
| - } |
14 |
| - |
15 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_VEC2(RET_TYPE, FUNCTION, ARG_TYPE) \ |
16 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
17 |
| - return (RET_TYPE)((RET_TYPE){FUNCTION(x.lo), FUNCTION(x.hi)} != \ |
18 |
| - (RET_TYPE)0); \ |
19 |
| - } |
20 |
| - |
21 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_VEC3(RET_TYPE, FUNCTION, ARG_TYPE) \ |
22 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
23 |
| - return (RET_TYPE)((RET_TYPE){FUNCTION(x.s0), FUNCTION(x.s1), \ |
24 |
| - FUNCTION(x.s2)} != (RET_TYPE)0); \ |
25 |
| - } |
26 |
| - |
27 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_VEC4(RET_TYPE, FUNCTION, ARG_TYPE) \ |
28 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
29 |
| - return (RET_TYPE)((RET_TYPE){FUNCTION(x.s0), FUNCTION(x.s1), \ |
30 |
| - FUNCTION(x.s2), \ |
31 |
| - FUNCTION(x.s3)} != (RET_TYPE)0); \ |
32 |
| - } |
33 |
| - |
34 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_VEC8(RET_TYPE, FUNCTION, ARG_TYPE) \ |
35 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
36 |
| - return ( \ |
37 |
| - RET_TYPE)((RET_TYPE){FUNCTION(x.s0), FUNCTION(x.s1), FUNCTION(x.s2), \ |
38 |
| - FUNCTION(x.s3), FUNCTION(x.s4), FUNCTION(x.s5), \ |
39 |
| - FUNCTION(x.s6), FUNCTION(x.s7)} != (RET_TYPE)0); \ |
40 |
| - } |
41 |
| - |
42 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_VEC16(RET_TYPE, FUNCTION, ARG_TYPE) \ |
43 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
44 |
| - return ( \ |
45 |
| - RET_TYPE)((RET_TYPE){FUNCTION(x.s0), FUNCTION(x.s1), FUNCTION(x.s2), \ |
46 |
| - FUNCTION(x.s3), FUNCTION(x.s4), FUNCTION(x.s5), \ |
47 |
| - FUNCTION(x.s6), FUNCTION(x.s7), FUNCTION(x.s8), \ |
48 |
| - FUNCTION(x.s9), FUNCTION(x.sa), FUNCTION(x.sb), \ |
49 |
| - FUNCTION(x.sc), FUNCTION(x.sd), FUNCTION(x.se), \ |
50 |
| - FUNCTION(x.sf)} != (RET_TYPE)0); \ |
51 |
| - } |
52 |
| - |
53 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(RET_TYPE, FUNCTION, ARG_TYPE) \ |
54 |
| - _CLC_DEFINE_RELATIONAL_UNARY_VEC2(RET_TYPE##2, FUNCTION, ARG_TYPE##2) \ |
55 |
| - _CLC_DEFINE_RELATIONAL_UNARY_VEC3(RET_TYPE##3, FUNCTION, ARG_TYPE##3) \ |
56 |
| - _CLC_DEFINE_RELATIONAL_UNARY_VEC4(RET_TYPE##4, FUNCTION, ARG_TYPE##4) \ |
57 |
| - _CLC_DEFINE_RELATIONAL_UNARY_VEC8(RET_TYPE##8, FUNCTION, ARG_TYPE##8) \ |
58 |
| - _CLC_DEFINE_RELATIONAL_UNARY_VEC16(RET_TYPE##16, FUNCTION, ARG_TYPE##16) |
59 |
| - |
60 |
| -#define _CLC_DEFINE_RELATIONAL_UNARY(RET_TYPE, FUNCTION, BUILTIN_FUNCTION, \ |
61 |
| - ARG_TYPE) \ |
62 |
| - _CLC_DEFINE_RELATIONAL_UNARY_SCALAR(RET_TYPE, FUNCTION, BUILTIN_FUNCTION, \ |
63 |
| - ARG_TYPE) \ |
64 |
| - _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(RET_TYPE, FUNCTION, ARG_TYPE) |
65 |
| - |
66 | 9 | #define _CLC_DEFINE_SIMPLE_RELATIONAL_BINARY(RET_TYPE, RET_TYPE_VEC, FUNCTION, \
|
67 | 10 | ARG1_TYPE, ARG2_TYPE) \
|
68 | 11 | _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \
|
|
89 | 32 | return _CLC_RELATIONAL_OP(x, y); \
|
90 | 33 | }
|
91 | 34 |
|
| 35 | +#define fcNan (__FPCLASS_SNAN | __FPCLASS_QNAN) |
| 36 | +#define fcInf (__FPCLASS_POSINF | __FPCLASS_NEGINF) |
| 37 | +#define fcNormal (__FPCLASS_POSNORMAL | __FPCLASS_NEGNORMAL) |
| 38 | +#define fcPosFinite \ |
| 39 | + (__FPCLASS_POSNORMAL | __FPCLASS_POSSUBNORMAL | __FPCLASS_POSZERO) |
| 40 | +#define fcNegFinite \ |
| 41 | + (__FPCLASS_NEGNORMAL | __FPCLASS_NEGSUBNORMAL | __FPCLASS_NEGZERO) |
| 42 | +#define fcFinite (fcPosFinite | fcNegFinite) |
| 43 | + |
| 44 | +#define _CLC_DEFINE_ISFPCLASS_VEC(RET_TYPE, FUNCTION, MASK, ARG_TYPE) \ |
| 45 | + _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
| 46 | + return (RET_TYPE)(__builtin_isfpclass(x, (MASK)) != (RET_TYPE)0); \ |
| 47 | + } |
| 48 | + |
| 49 | +#define _CLC_DEFINE_ISFPCLASS(RET_TYPE, VEC_RET_TYPE, FUNCTION, MASK, \ |
| 50 | + ARG_TYPE) \ |
| 51 | + _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG_TYPE x) { \ |
| 52 | + return __builtin_isfpclass(x, (MASK)); \ |
| 53 | + } \ |
| 54 | + _CLC_DEFINE_ISFPCLASS_VEC(VEC_RET_TYPE##2, FUNCTION, MASK, ARG_TYPE##2) \ |
| 55 | + _CLC_DEFINE_ISFPCLASS_VEC(VEC_RET_TYPE##3, FUNCTION, MASK, ARG_TYPE##3) \ |
| 56 | + _CLC_DEFINE_ISFPCLASS_VEC(VEC_RET_TYPE##4, FUNCTION, MASK, ARG_TYPE##4) \ |
| 57 | + _CLC_DEFINE_ISFPCLASS_VEC(VEC_RET_TYPE##8, FUNCTION, MASK, ARG_TYPE##8) \ |
| 58 | + _CLC_DEFINE_ISFPCLASS_VEC(VEC_RET_TYPE##16, FUNCTION, MASK, ARG_TYPE##16) |
| 59 | + |
92 | 60 | #endif // __CLC_RELATIONAL_RELATIONAL_H__
|
0 commit comments