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