1 //------------------------------------------------------------------------------ 2 // GB_2type_factory.c: 2-type switch factory 3 //------------------------------------------------------------------------------ 4 5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 6 // SPDX-License-Identifier: Apache-2.0 7 8 //------------------------------------------------------------------------------ 9 10 // This is a generic switch factory for creating 169 workers that operate on 11 // two built-in data types (13 types each), to be #include'd in another file. 12 // GB_WORKER(op,zname,ztype,xname,xtype) is a macro defined in the #including 13 // file, where ztype and xtype are the built-in types corresponding to code1 14 // and code2, respectively or (void *) for a user-defined type. The last 15 // statement of GB_WORKER should be a break or return since it does not appear 16 // here. 17 18 // User-defined types are not handled. 19 20 switch (code1) 21 { 22 case GB_BOOL_code : 23 24 switch (code2) 25 { 26 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 27 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _bool, bool, _bool, bool ) 28 #endif 29 case GB_INT8_code : GB_WORKER (GB_OPNAME, _bool, bool, _int8, int8_t ) 30 case GB_INT16_code : GB_WORKER (GB_OPNAME, _bool, bool, _int16, int16_t ) 31 case GB_INT32_code : GB_WORKER (GB_OPNAME, _bool, bool, _int32, int32_t ) 32 case GB_INT64_code : GB_WORKER (GB_OPNAME, _bool, bool, _int64, int64_t ) 33 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _bool, bool, _uint8, uint8_t ) 34 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _bool, bool, _uint16, uint16_t ) 35 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _bool, bool, _uint32, uint32_t ) 36 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _bool, bool, _uint64, uint64_t ) 37 case GB_FP32_code : GB_WORKER (GB_OPNAME, _bool, bool, _fp32, float ) 38 case GB_FP64_code : GB_WORKER (GB_OPNAME, _bool, bool, _fp64, double ) 39 #ifndef GBCUDA 40 // TODO: does not yet work in CUDA 41 case GB_FC32_code : GB_WORKER (GB_OPNAME, _bool, bool, _fc32, GxB_FC32_t) 42 case GB_FC64_code : GB_WORKER (GB_OPNAME, _bool, bool, _fc64, GxB_FC64_t) 43 #endif 44 default: ; 45 } 46 break ; 47 48 case GB_INT8_code : 49 50 switch (code2) 51 { 52 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _bool, bool ) 53 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 54 case GB_INT8_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _int8, int8_t ) 55 #endif 56 case GB_INT16_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _int16, int16_t ) 57 case GB_INT32_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _int32, int32_t ) 58 case GB_INT64_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _int64, int64_t ) 59 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _uint8, uint8_t ) 60 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _uint16, uint16_t ) 61 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _uint32, uint32_t ) 62 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _uint64, uint64_t ) 63 case GB_FP32_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _fp32, float ) 64 case GB_FP64_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _fp64, double ) 65 #ifndef GBCUDA 66 // TODO: does not yet work in CUDA 67 case GB_FC32_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _fc32, GxB_FC32_t) 68 case GB_FC64_code : GB_WORKER (GB_OPNAME, _int8, int8_t, _fc64, GxB_FC64_t) 69 #endif 70 default: ; 71 } 72 break ; 73 74 case GB_INT16_code : 75 76 switch (code2) 77 { 78 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _bool, bool ) 79 case GB_INT8_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _int8, int8_t ) 80 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 81 case GB_INT16_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _int16, int16_t ) 82 #endif 83 case GB_INT32_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _int32, int32_t ) 84 case GB_INT64_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _int64, int64_t ) 85 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _uint8, uint8_t ) 86 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _uint16, uint16_t ) 87 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _uint32, uint32_t ) 88 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _uint64, uint64_t ) 89 case GB_FP32_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _fp32, float ) 90 case GB_FP64_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _fp64, double ) 91 #ifndef GBCUDA 92 // TODO: does not yet work in CUDA 93 case GB_FC32_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _fc32, GxB_FC32_t) 94 case GB_FC64_code : GB_WORKER (GB_OPNAME, _int16, int16_t, _fc64, GxB_FC64_t) 95 #endif 96 default: ; 97 } 98 break ; 99 100 case GB_INT32_code : 101 102 switch (code2) 103 { 104 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _bool, bool ) 105 case GB_INT8_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _int8, int8_t ) 106 case GB_INT16_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _int16, int16_t ) 107 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 108 case GB_INT32_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _int32, int32_t ) 109 #endif 110 case GB_INT64_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _int64, int64_t ) 111 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _uint8, uint8_t ) 112 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _uint16, uint16_t ) 113 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _uint32, uint32_t ) 114 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _uint64, uint64_t ) 115 case GB_FP32_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _fp32, float ) 116 case GB_FP64_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _fp64, double ) 117 #ifndef GBCUDA 118 // TODO: does not yet work in CUDA 119 case GB_FC32_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _fc32, GxB_FC32_t) 120 case GB_FC64_code : GB_WORKER (GB_OPNAME, _int32, int32_t, _fc64, GxB_FC64_t) 121 #endif 122 default: ; 123 } 124 break ; 125 126 case GB_INT64_code : 127 128 switch (code2) 129 { 130 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _bool, bool ) 131 case GB_INT8_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _int8, int8_t ) 132 case GB_INT16_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _int16, int16_t ) 133 case GB_INT32_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _int32, int32_t ) 134 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 135 case GB_INT64_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _int64, int64_t ) 136 #endif 137 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _uint8, uint8_t ) 138 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _uint16, uint16_t ) 139 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _uint32, uint32_t ) 140 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _uint64, uint64_t ) 141 case GB_FP32_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _fp32, float ) 142 case GB_FP64_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _fp64, double ) 143 #ifndef GBCUDA 144 // TODO: does not yet work in CUDA 145 case GB_FC32_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _fc32, GxB_FC32_t) 146 case GB_FC64_code : GB_WORKER (GB_OPNAME, _int64, int64_t, _fc64, GxB_FC64_t) 147 #endif 148 default: ; 149 } 150 break ; 151 152 case GB_UINT8_code : 153 154 switch (code2) 155 { 156 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _bool, bool ) 157 case GB_INT8_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _int8, int8_t ) 158 case GB_INT16_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _int16, int16_t ) 159 case GB_INT32_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _int32, int32_t ) 160 case GB_INT64_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _int64, int64_t ) 161 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 162 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _uint8, uint8_t ) 163 #endif 164 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _uint16, uint16_t ) 165 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _uint32, uint32_t ) 166 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _uint64, uint64_t ) 167 case GB_FP32_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _fp32, float ) 168 case GB_FP64_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _fp64, double ) 169 #ifndef GBCUDA 170 // TODO: does not yet work in CUDA 171 case GB_FC32_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _fc32, GxB_FC32_t) 172 case GB_FC64_code : GB_WORKER (GB_OPNAME, _uint8, uint8_t, _fc64, GxB_FC64_t) 173 #endif 174 default: ; 175 } 176 break ; 177 178 case GB_UINT16_code : 179 180 switch (code2) 181 { 182 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _bool, bool ) 183 case GB_INT8_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _int8, int8_t ) 184 case GB_INT16_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _int16, int16_t ) 185 case GB_INT32_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _int32, int32_t ) 186 case GB_INT64_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _int64, int64_t ) 187 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _uint8, uint8_t ) 188 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 189 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _uint16, uint16_t ) 190 #endif 191 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _uint32, uint32_t ) 192 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _uint64, uint64_t ) 193 case GB_FP32_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _fp32, float ) 194 case GB_FP64_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _fp64, double ) 195 #ifndef GBCUDA 196 // TODO: does not yet work in CUDA 197 case GB_FC32_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _fc32, GxB_FC32_t) 198 case GB_FC64_code : GB_WORKER (GB_OPNAME, _uint16, uint16_t, _fc64, GxB_FC64_t) 199 #endif 200 default: ; 201 } 202 break ; 203 204 case GB_UINT32_code : 205 206 switch (code2) 207 { 208 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _bool, bool ) 209 case GB_INT8_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _int8, int8_t ) 210 case GB_INT16_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _int16, int16_t ) 211 case GB_INT32_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _int32, int32_t ) 212 case GB_INT64_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _int64, int64_t ) 213 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _uint8, uint8_t ) 214 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _uint16, uint16_t ) 215 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 216 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _uint32, uint32_t ) 217 #endif 218 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _uint64, uint64_t ) 219 case GB_FP32_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _fp32, float ) 220 case GB_FP64_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _fp64, double ) 221 #ifndef GBCUDA 222 // TODO: does not yet work in CUDA 223 case GB_FC32_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _fc32, GxB_FC32_t) 224 case GB_FC64_code : GB_WORKER (GB_OPNAME, _uint32, uint32_t, _fc64, GxB_FC64_t) 225 #endif 226 default: ; 227 } 228 break ; 229 230 case GB_UINT64_code : 231 232 switch (code2) 233 { 234 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _bool, bool ) 235 case GB_INT8_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _int8, int8_t ) 236 case GB_INT16_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _int16, int16_t ) 237 case GB_INT32_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _int32, int32_t ) 238 case GB_INT64_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _int64, int64_t ) 239 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _uint8, uint8_t ) 240 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _uint16, uint16_t ) 241 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _uint32, uint32_t ) 242 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 243 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _uint64, uint64_t ) 244 #endif 245 case GB_FP32_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _fp32, float ) 246 case GB_FP64_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _fp64, double ) 247 #ifndef GBCUDA 248 // TODO: does not yet work in CUDA 249 case GB_FC32_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _fc32, GxB_FC32_t) 250 case GB_FC64_code : GB_WORKER (GB_OPNAME, _uint64, uint64_t, _fc64, GxB_FC64_t) 251 #endif 252 default: ; 253 } 254 break ; 255 256 case GB_FP32_code : 257 258 switch (code2) 259 { 260 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _fp32, float, _bool, bool ) 261 case GB_INT8_code : GB_WORKER (GB_OPNAME, _fp32, float, _int8, int8_t ) 262 case GB_INT16_code : GB_WORKER (GB_OPNAME, _fp32, float, _int16, int16_t ) 263 case GB_INT32_code : GB_WORKER (GB_OPNAME, _fp32, float, _int32, int32_t ) 264 case GB_INT64_code : GB_WORKER (GB_OPNAME, _fp32, float, _int64, int64_t ) 265 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _fp32, float, _uint8, uint8_t ) 266 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _fp32, float, _uint16, uint16_t ) 267 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _fp32, float, _uint32, uint32_t ) 268 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _fp32, float, _uint64, uint64_t ) 269 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 270 case GB_FP32_code : GB_WORKER (GB_OPNAME, _fp32, float, _fp32, float ) 271 #endif 272 case GB_FP64_code : GB_WORKER (GB_OPNAME, _fp32, float, _fp64, double ) 273 #ifndef GBCUDA 274 // TODO: does not yet work in CUDA 275 case GB_FC32_code : GB_WORKER (GB_OPNAME, _fp32, float, _fc32, GxB_FC32_t) 276 case GB_FC64_code : GB_WORKER (GB_OPNAME, _fp32, float, _fc64, GxB_FC64_t) 277 #endif 278 default: ; 279 } 280 break ; 281 282 case GB_FP64_code : 283 284 switch (code2) 285 { 286 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _fp64, double, _bool, bool ) 287 case GB_INT8_code : GB_WORKER (GB_OPNAME, _fp64, double, _int8, int8_t ) 288 case GB_INT16_code : GB_WORKER (GB_OPNAME, _fp64, double, _int16, int16_t ) 289 case GB_INT32_code : GB_WORKER (GB_OPNAME, _fp64, double, _int32, int32_t ) 290 case GB_INT64_code : GB_WORKER (GB_OPNAME, _fp64, double, _int64, int64_t ) 291 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _fp64, double, _uint8, uint8_t ) 292 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _fp64, double, _uint16, uint16_t ) 293 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _fp64, double, _uint32, uint32_t ) 294 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _fp64, double, _uint64, uint64_t ) 295 case GB_FP32_code : GB_WORKER (GB_OPNAME, _fp64, double, _fp32, float ) 296 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 297 case GB_FP64_code : GB_WORKER (GB_OPNAME, _fp64, double, _fp64, double ) 298 #endif 299 #ifndef GBCUDA 300 // TODO: does not yet work in CUDA 301 case GB_FC32_code : GB_WORKER (GB_OPNAME, _fp64, double, _fc32, GxB_FC32_t) 302 case GB_FC64_code : GB_WORKER (GB_OPNAME, _fp64, double, _fc64, GxB_FC64_t) 303 #endif 304 default: ; 305 } 306 break ; 307 308 case GB_FC32_code : 309 310 switch (code2) 311 { 312 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _bool, bool ) 313 case GB_INT8_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _int8, int8_t ) 314 case GB_INT16_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _int16, int16_t ) 315 case GB_INT32_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _int32, int32_t ) 316 case GB_INT64_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _int64, int64_t ) 317 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _uint8, uint8_t ) 318 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _uint16, uint16_t ) 319 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _uint32, uint32_t ) 320 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _uint64, uint64_t ) 321 case GB_FP32_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _fp32, float ) 322 case GB_FP64_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _fp64, double ) 323 #ifndef GBCUDA 324 // TODO: does not yet work in CUDA 325 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 326 case GB_FC32_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _fc32, GxB_FC32_t) 327 #endif 328 case GB_FC64_code : GB_WORKER (GB_OPNAME, _fc32, GxB_FC32_t, _fc64, GxB_FC64_t) 329 #endif 330 default: ; 331 } 332 break ; 333 334 case GB_FC64_code : 335 336 switch (code2) 337 { 338 case GB_BOOL_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _bool, bool ) 339 case GB_INT8_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _int8, int8_t ) 340 case GB_INT16_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _int16, int16_t ) 341 case GB_INT32_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _int32, int32_t ) 342 case GB_INT64_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _int64, int64_t ) 343 case GB_UINT8_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _uint8, uint8_t ) 344 case GB_UINT16_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _uint16, uint16_t ) 345 case GB_UINT32_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _uint32, uint32_t ) 346 case GB_UINT64_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _uint64, uint64_t ) 347 case GB_FP32_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _fp32, float ) 348 case GB_FP64_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _fp64, double ) 349 #ifndef GBCUDA 350 // TODO: does not yet work in CUDA 351 case GB_FC32_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _fc32, GxB_FC32_t) 352 #if !defined ( GB_EXCLUDE_SAME_TYPES ) 353 case GB_FC64_code : GB_WORKER (GB_OPNAME, _fc64, GxB_FC64_t, _fc64, GxB_FC64_t) 354 #endif 355 #endif 356 default: ; 357 } 358 break ; 359 360 default: ; 361 } 362 363 #undef GB_OPNAME 364 365