| 1 | /* This testcase is part of GDB, the GNU debugger. |
| 2 | |
| 3 | Copyright 2011-2019 Free Software Foundation, Inc. |
| 4 | |
| 5 | This program is free software; you can redistribute it and/or modify |
| 6 | it under the terms of the GNU General Public License as published by |
| 7 | the Free Software Foundation; either version 3 of the License, or |
| 8 | (at your option) any later version. |
| 9 | |
| 10 | This program is distributed in the hope that it will be useful, |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | GNU General Public License for more details. |
| 14 | |
| 15 | You should have received a copy of the GNU General Public License |
| 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 17 | |
| 18 | Contributed by Ulrich Weigand <ulrich.weigand.ibm.com> */ |
| 19 | |
| 20 | __constant int opencl_version = __OPENCL_VERSION__; |
| 21 | |
| 22 | #ifdef HAVE_cl_khr_fp64 |
| 23 | #pragma OPENCL EXTENSION cl_khr_fp64 : enable |
| 24 | __constant int have_cl_khr_fp64 = 1; |
| 25 | #else |
| 26 | __constant int have_cl_khr_fp64 = 0; |
| 27 | #endif |
| 28 | |
| 29 | #ifdef HAVE_cl_khr_fp16 |
| 30 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable |
| 31 | __constant int have_cl_khr_fp16 = 1; |
| 32 | #else |
| 33 | __constant int have_cl_khr_fp16 = 0; |
| 34 | #endif |
| 35 | |
| 36 | #define def_call_func(type) \ |
| 37 | type call_##type (type a, type b) { return a + b; } |
| 38 | |
| 39 | #ifdef CL_VERSION_1_1 |
| 40 | #define def_call_family(type) \ |
| 41 | def_call_func(type) \ |
| 42 | def_call_func(type##2) \ |
| 43 | def_call_func(type##3) \ |
| 44 | def_call_func(type##4) \ |
| 45 | def_call_func(type##8) \ |
| 46 | def_call_func(type##16) |
| 47 | #else |
| 48 | #define def_call_family(type) \ |
| 49 | def_call_func(type) \ |
| 50 | def_call_func(type##2) \ |
| 51 | def_call_func(type##4) \ |
| 52 | def_call_func(type##8) \ |
| 53 | def_call_func(type##16) |
| 54 | #endif |
| 55 | |
| 56 | def_call_family(char) |
| 57 | def_call_family(uchar) |
| 58 | def_call_family(short) |
| 59 | def_call_family(ushort) |
| 60 | def_call_family(int) |
| 61 | def_call_family(uint) |
| 62 | def_call_family(long) |
| 63 | def_call_family(ulong) |
| 64 | #ifdef cl_khr_fp16 |
| 65 | def_call_family(half) |
| 66 | #endif |
| 67 | def_call_family(float) |
| 68 | #ifdef cl_khr_fp64 |
| 69 | def_call_family(double) |
| 70 | #endif |
| 71 | |
| 72 | #define call_func(type, var) \ |
| 73 | var = call_##type (var, var); |
| 74 | |
| 75 | #ifdef CL_VERSION_1_1 |
| 76 | #define call_family(type, var) \ |
| 77 | call_func(type, var) \ |
| 78 | call_func(type##2, var##2) \ |
| 79 | call_func(type##3, var##3) \ |
| 80 | call_func(type##4, var##4) \ |
| 81 | call_func(type##8, var##8) \ |
| 82 | call_func(type##16, var##16) |
| 83 | #else |
| 84 | #define call_family(type, var) \ |
| 85 | call_func(type, var) \ |
| 86 | call_func(type##2, var##2) \ |
| 87 | call_func(type##4, var##4) \ |
| 88 | call_func(type##8, var##8) \ |
| 89 | call_func(type##16, var##16) |
| 90 | #endif |
| 91 | |
| 92 | __kernel void testkernel (__global int *data) |
| 93 | { |
| 94 | bool b = 0; |
| 95 | |
| 96 | char c = 1; |
| 97 | char2 c2 = (char2) (1, 2); |
| 98 | #ifdef CL_VERSION_1_1 |
| 99 | char3 c3 = (char3) (1, 2, 3); |
| 100 | #endif |
| 101 | char4 c4 = (char4) (1, 2, 3, 4); |
| 102 | char8 c8 = (char8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 103 | char16 c16 = (char16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 104 | |
| 105 | uchar uc = 1; |
| 106 | uchar2 uc2 = (uchar2) (1, 2); |
| 107 | #ifdef CL_VERSION_1_1 |
| 108 | uchar3 uc3 = (uchar3) (1, 2, 3); |
| 109 | #endif |
| 110 | uchar4 uc4 = (uchar4) (1, 2, 3, 4); |
| 111 | uchar8 uc8 = (uchar8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 112 | uchar16 uc16 = (uchar16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 113 | |
| 114 | short s = 1; |
| 115 | short2 s2 = (short2) (1, 2); |
| 116 | #ifdef CL_VERSION_1_1 |
| 117 | short3 s3 = (short3) (1, 2, 3); |
| 118 | #endif |
| 119 | short4 s4 = (short4) (1, 2, 3, 4); |
| 120 | short8 s8 = (short8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 121 | short16 s16 = (short16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 122 | |
| 123 | ushort us = 1; |
| 124 | ushort2 us2 = (ushort2) (1, 2); |
| 125 | #ifdef CL_VERSION_1_1 |
| 126 | ushort3 us3 = (ushort3) (1, 2, 3); |
| 127 | #endif |
| 128 | ushort4 us4 = (ushort4) (1, 2, 3, 4); |
| 129 | ushort8 us8 = (ushort8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 130 | ushort16 us16 = (ushort16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 131 | |
| 132 | int i = 1; |
| 133 | int2 i2 = (int2) (1, 2); |
| 134 | #ifdef CL_VERSION_1_1 |
| 135 | int3 i3 = (int3) (1, 2, 3); |
| 136 | #endif |
| 137 | int4 i4 = (int4) (1, 2, 3, 4); |
| 138 | int8 i8 = (int8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 139 | int16 i16 = (int16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 140 | |
| 141 | uint ui = 1; |
| 142 | uint2 ui2 = (uint2) (1, 2); |
| 143 | #ifdef CL_VERSION_1_1 |
| 144 | uint3 ui3 = (uint3) (1, 2, 3); |
| 145 | #endif |
| 146 | uint4 ui4 = (uint4) (1, 2, 3, 4); |
| 147 | uint8 ui8 = (uint8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 148 | uint16 ui16 = (uint16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 149 | |
| 150 | long l = 1; |
| 151 | long2 l2 = (long2) (1, 2); |
| 152 | #ifdef CL_VERSION_1_1 |
| 153 | long3 l3 = (long3) (1, 2, 3); |
| 154 | #endif |
| 155 | long4 l4 = (long4) (1, 2, 3, 4); |
| 156 | long8 l8 = (long8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 157 | long16 l16 = (long16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 158 | |
| 159 | ulong ul = 1; |
| 160 | ulong2 ul2 = (ulong2) (1, 2); |
| 161 | #ifdef CL_VERSION_1_1 |
| 162 | ulong3 ul3 = (ulong3) (1, 2, 3); |
| 163 | #endif |
| 164 | ulong4 ul4 = (ulong4) (1, 2, 3, 4); |
| 165 | ulong8 ul8 = (ulong8) (1, 2, 3, 4, 5, 6, 7, 8); |
| 166 | ulong16 ul16 = (ulong16)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); |
| 167 | |
| 168 | #ifdef cl_khr_fp16 |
| 169 | half h = 1.0; |
| 170 | half2 h2 = (half2) (1.0, 2.0); |
| 171 | #ifdef CL_VERSION_1_1 |
| 172 | half3 h3 = (half3) (1.0, 2.0, 3.0); |
| 173 | #endif |
| 174 | half4 h4 = (half4) (1.0, 2.0, 3.0, 4.0); |
| 175 | half8 h8 = (half8) (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); |
| 176 | half16 h16 = (half16)(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); |
| 177 | #endif |
| 178 | |
| 179 | float f = 1.0; |
| 180 | float2 f2 = (float2) (1.0, 2.0); |
| 181 | #ifdef CL_VERSION_1_1 |
| 182 | float3 f3 = (float3) (1.0, 2.0, 3.0); |
| 183 | #endif |
| 184 | float4 f4 = (float4) (1.0, 2.0, 3.0, 4.0); |
| 185 | float8 f8 = (float8) (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); |
| 186 | float16 f16 = (float16)(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); |
| 187 | |
| 188 | #ifdef cl_khr_fp64 |
| 189 | double d = 1.0; |
| 190 | double2 d2 = (double2) (1.0, 2.0); |
| 191 | #ifdef CL_VERSION_1_1 |
| 192 | double3 d3 = (double3) (1.0, 2.0, 3.0); |
| 193 | #endif |
| 194 | double4 d4 = (double4) (1.0, 2.0, 3.0, 4.0); |
| 195 | double8 d8 = (double8) (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); |
| 196 | double16 d16 = (double16)(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); |
| 197 | #endif |
| 198 | |
| 199 | /* marker! */ |
| 200 | |
| 201 | call_family (char, c); |
| 202 | call_family (uchar, uc); |
| 203 | call_family (short, s); |
| 204 | call_family (ushort, us); |
| 205 | call_family (int, i); |
| 206 | call_family (uint, ui); |
| 207 | call_family (long, l); |
| 208 | call_family (ulong, ul); |
| 209 | #ifdef cl_khr_fp16 |
| 210 | call_family (half, h); |
| 211 | #endif |
| 212 | call_family (float, f); |
| 213 | #ifdef cl_khr_fp64 |
| 214 | call_family (double, d); |
| 215 | #endif |
| 216 | |
| 217 | data[get_global_id(0)] = 1; |
| 218 | } |